[js]Een onchange even een instantie aan laten roepen

Pagina: 1
Acties:

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 13:54
Ik heb een stukje code, een object. Hierin heb ik
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//javascript code met kleurtjes

//deze functie zou aangeroepen moeten worden bij een onchange
dynamicSelect.prototype.masterChange=function() {
    alert('jippi');
}

//hiermee wordt het systeem in werking gezet
dynamicSelect.prototype.addMasterSelect=function(selectID)  {
    this.masterSelect=selectID;
    document.getElementById(selectID).onchange=function() {
        this.masterChange(); //niet werkende test op deze regel
    }
}

Dit zorgt er voor dat er aan de selectbox met de ID welke ik meegeef aan de functie een onchange event gehangen wordt. Dit werkt goed, dat heb ik getest door een alert te geven.

Wat wil ik: Zodra het onchange event afgaat wil ik dat de methode masterChange aangeroepen wordt en dat de alert dus verschijnt. Ik begrijp echter niet hoe ik nu naar de instantie van het object kan verwijzen.

Dit is noodzakelijk omdat de methode masterChange straks gegevens gebruikt welke alleen binnen de instantie bekend zijn.

Een ranzige oplossing heb ik wel, ik stuur de instantienaam in een globale variable mee. Dan kan het maar het is niet mooi.

Verwijderd

Je zit met scope problemen. In je onchange function verwijst this niet naar je object. Oplossing is eenvoudig;

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//javascript code met kleurtjes

//deze functie zou aangeroepen moeten worden bij een onchange
dynamicSelect.prototype.masterChange=function() {
    alert('jippi');
}

//hiermee wordt het systeem in werking gezet
dynamicSelect.prototype.addMasterSelect=function(selectID)  {
    this.masterSelect=selectID;
    var self = this;
    document.getElementById(selectID).onchange=function() {
        self.masterChange(); //niet werkende test op deze regel
    }
}

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 13:54
Verwijderd schreef op woensdag 22 juni 2005 @ 20:49:
Je zit met scope problemen. In je onchange function verwijst this niet naar je object. Oplossing is eenvoudig;
Heel erg bedankt! Zo simpel. Toch begrijp ik de logica nog niet helemaal, je maakt een kopie van this in var self. Waarom werkt het dan ineens wel? Die variable is toch ook alleen bekend binnen het object zelf?