Uncaught TypeError: Illegal Aufruf an addEventListener
Bekomme ich eine Uncaught TypeError: Illegal invocation
für beide Versionen dieser Versuch zu legen, die ein EventListener: (ich bekomme die Fehlermeldung, wenn der listener Hinzugefügt werden soll, nicht wenn ich auf das Ziel)
ronan.addEventListener("click", alert, false);
addEventListener.apply(ronan, ["click", alert, false]);
ronan
ist ein div
element, das zurückgegeben wird, erfolgreich von der Konsole, so dass ich glaube nicht, dass das das problem. Irgendwelche Ideen, warum ich diese Fehlermeldung erhalten? Ich lese diese thread und ich konnte nicht es herausfinden.
InformationsquelleAutor der Frage Artur Sapek | 2011-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie wrap
alert
in einer Funktion. Dies funktioniert:Hier ein fiddle für den Nachweis. Mit
alert
allein nicht funktionieren, weil, wenn ein listener wird ausgeführt, der Wert vonthis
innerhalb dieser Funktion ist das Objekt, auf dem es lauscht. Zum Beispiel, wenn Sie einen listener aufronan
innerhalb dieser listenerthis === ronan
. Dies stellt ein problem füralert
werden, weil die Funktion erwartetthis
gleichwindow
. Sie können umgehen dies (kein Wortspiel beabsichtigt), indem er die Funktion in einer anderen Funktion oder durch Bindung an was auch immer, es erwartetthis
werden:Vergessen Sie nicht, dass in IE < 9, die Sie verwenden müssen
attachEvent
eher alsaddEventListener
.Ein Hinweis auf die Verwendung
apply
/call
mitaddEventListener
Ihrem zweiten Versuch wird nicht funktionieren, weil Sie versuchen, Ihre Argumente zu
window.addEventListener
im Gegensatz zuHTMLElement.prototype.addEventListener
die eine andere Funktion insgesamt:InformationsquelleAutor der Antwort Matthew Caruana Galizia