TypeError non intercepté: Invocation illégale sur addEventListener
- Je obtenir une Uncaught TypeError: Illegal invocation
pour les deux versions de cette tentative de mettre un EventListener: (je reçois le message d'erreur lors de l'auditeur doit être ajouté, pas quand je clique sur la cible)
ronan.addEventListener("click", alert, false);
addEventListener.apply(ronan, ["click", alert, false]);
ronan
est un div
élément qui est retourné avec succès par la console donc je ne pense pas que ce soit le problème. Des idées pourquoi j'ai cette erreur? J'ai lu cette fil et je ne pouvais pas le comprendre.
source d'informationauteur Artur Sapek | 2011-08-27
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'envelopper
alert
dans une fonction. Cela va fonctionner:Voici un violon de la preuve. À l'aide de
alert
seul ne fonctionne pas parce que lorsqu'un écouteur est exécuté à la valeur dethis
à l'intérieur de cette fonction est définie sur l'objet sur lequel il est à l'écoute. Par exemple, si vous définissez un listener surronan
au sein de cet auditeurthis === ronan
. Cela pose un problème pouralert
parce que la fonction attendthis
être égale àwindow
. Vous pouvez contourner ce (no pun intended) par emballage de la fonction dans une autre fonction, ou en le liant à ce qu'il s'attend à cethis
:N'oubliez pas que dans IE < 9, vous devez utiliser
attachEvent
plutôt queaddEventListener
.Une remarque sur l'utilisation de
apply
/call
avecaddEventListener
Votre deuxième tentative ne fonctionne pas parce que vous essayez d'appliquer vos arguments pour
window.addEventListener
par opposition àHTMLElement.prototype.addEventListener
qui est une fonction différente: