Salut,
Je suis pas tres satisfait de moi quand je dois créer des gestionnaires d'evenement (ex: onclick sur un élement <input type="button">) à l'intérieur d'une autre fonction où d'une methode. J'ai les memes problèmes quand je dois créer la fonction de gestion des changement d'état HTTP avec les objets xmlHttp.
J'ai surtout des problemes avec le langage lui meme et la portée des variables et de "this", tout ça n'est pas clair dans ma tête
Pour être sur de ce que je fais, en general je crée une fonction externe (ou methode de classe, c'est pareil) pour le gestionnaire d'evenement et je passe par une propriété qui reference l'objet que je rajoute dans l'element.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 MaClasse.prototype.methode = function() { /* .... */ var variable_locale = new Array(); var entier = 54; elementBouton.onclick = function (e) { /* Que reference 'this' ici? */ /* Que reference 'variable_locale' ici? */ /* Que vaut 'entier' ici? */ } entier = 64; }
Et c'est là que ça me choque conceptuellement : on va beaucoup utiliser "theObj" dans une fonction qui n'est pas une methode d'instance de MaClasse. J'aurais préféré utiliser "this", ou encore, faire en sorte que le gestionnaire d'evenement soit directement une methode de MaClasse, ça aurait été mieux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 MaClasse.prototype.methode = function() { /* ... */ textarea.theObjet = this; textarea.onkeyup = MaClasse.gestionnaireKeyUp; } MaClasse.gestionnaireKeyUp= function(e) { var theObj = this.theObjet; /* this reference l'élément textarea */ theObj.methodeXX(); /*.... en général, plein de code qui utilise theObj ... */ }
Quels sont vos avis sur la chose?
Merci
Partager