Jetez un oeil à la méthode handleEvent
https://developer.mozilla.org/en-US/docs/Web/API/EventListener
"Raw" Javascript:
function MyObj() {
this.abc = "ABC";
}
MyObj.prototype.handleEvent = function(e) {
console.log("caught event: "+e.type);
console.log(this.abc);
}
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj);
Cliquez maintenant sur votre élément (avec id "myElement") et il devrait imprimer la dans la console:
événement détecté: cliquez sur
ABC
Cela vous permet d'avoir une méthode d'objet comme gestionnaire d'événements, et avoir accès à toutes les propriétés de l'objet dans cette méthode.
Vous ne pouvez pas juste passer une méthode d'un objet à addEventListener directement (comme ça: element.addEventListener('click',myObj.myMethod);
) et attendre myMethod
à agir comme si je normalement appelé sur l'objet. Je devine que n'importe quelle fonction passée à addEventListener est en quelque sorte copiée au lieu d'être référencée. Par exemple, si vous passez une référence de fonction d'écouteur d'événement à addEventListener (sous la forme d'une variable) puis que vous supprimez cette référence, l'écouteur d'événement est toujours exécuté lorsque des événements sont interceptés.
Une autre (moins élégant) solution pour passer une méthode comme écouteur d'événement et stil this
et ont encore accès à des propriétés d'objet dans l'écouteur d'événement serait quelque chose comme ça:
// see above for definition of MyObj
var myObj = new MyObj();
document.querySelector("#myElement").addEventListener('click', myObj.handleEvent.bind(myObj));
Je pense que vous êtes le seul à ne pas me voir comme un imbécile (pour ne pas mentionner la notation de parenthèse/l'incompatibilité du navigateur onclick | click). Spot sur! – Ropstah
considérez ceci: http://www.howtocreate.co.uk/tutorials/javascript/domevents - appellera la fonction onclick invoquera * tous * les gestionnaires d'événements enregistrés? De même, invoquer de faussement un événement ne produira pas l'action par défaut associée à cet événement (par exemple, une soumission de formulaire). – jrharshath
Gumbo, car ce code produit des résultats différents, il ne fonctionne toujours pas avec les bibliothèques Microsoft.Ajax et Microsoft.AjaxMvc .... – Ropstah