Hallo,
PS: parameterübergabe über die Funktion mit var bla = this möchte ich vermeiden - es gibt doch bestimmt eine saubere lösung dazu.
Deine Frage ist identisch mit der, die du in https://forum.selfhtml.org/?t=134586&m=873078 gestellt hast. Die Lösung, die dir da gegeben wurde, ist m.M.n. bereits die sauberste Lösung.
function Cselector () {
var thisObj = this;
...
this.updateOptions = function (eventobjekt) {
alert(this); // zeigt auf der Elementobjekt, bei dem der Handler registriert wurde
alert(thisObj); // Zeigt immer auf die Cselector-Instanz
};
...
field.onchange = this.updateOptions;
}
Die Technik dahinter sind wie gesagt Closures. Um die kommst du nur durch eine Möglichkeit herum: Du speicherst eine Referenz auf die Cselector-Instanz am select-Elementobjekt. Im Handler kannst du dann über this auf diese Referenz zugreifen und bekommst die Cselector-Instanz:
function Cselector () {
this.updateOptions = function (eventobjekt) {
alert(this.correspondingCselector);
this.correspondingCselector.getOptions('user.xml'); // usw.
};
...
field.correspondingCselector = this;
field.onchange = this.updateOptions;
}
Eine dritte Möglichkeit gibt es meines Wissens nicht.
Mathias