Ich habe dynamisch ein Kontrollkästchen erstellt. Ich habe addEventListener
beim Klicken auf das Kontrollkästchen eine Funktion aufgerufen, die in Google Chrome und Firefox funktioniert, in Internet Explorer 8 jedoch nicht . Das ist mein Code:
var _checkbox = document.createElement("input");
_checkbox.addEventListener("click", setCheckedValues, false);
setCheckedValues
ist mein Event-Handler.
Sie müssen
attachEvent
in IE-Versionen vor IE9 verwenden. Ermitteln Sie, obaddEventListener
es definiert ist, und verwenden Sie es,attachEvent
wenn dies nicht der Fall ist:Beachten Sie, dass IE11 entfernt wird
attachEvent
.Siehe auch:
element.addEventListener
:: Legacy Internet Explorer und attachEventquelle
Dies ist auch eine einfache Crossbrowser-Lösung:
Anstelle von "Klicken" kann natürlich jedes Ereignis sein.
quelle
addEventListener
Das dritte Argument ist ohnehin optional, daher kann dies eine gute Lösung sein, und es ist schöner als die if-else-Zweige. Aber in diesem Fall_checkbox
ist das Zielelement nichtwindow
. :) Vielleicht könnten Sie eine Funktion erstellen, bei der das Ereignisziel ein weiteres Argument ist.addEventListener
Aufrufe von Ereigniszielelementen zu aliasen - siehe dieses Thema: stackoverflow.com/questions/1007340/… . Für daswindow
Objekt funktioniert es also korrekt, aber nicht für andere Knoten im Dokument. Auf diese Weise ist Ihr vorgeschlagenes Aliasing für den in der ursprünglichen Frage genannten Fall NICHT korrekt! Was wäre Ihre Problemumgehung?IE wird erst
addEventListener
ab Version 9 unterstützt, daher müssen Sie Folgendes verwendenattachEvent
: Hier ein Beispiel:quelle
Vielleicht ist es einfacher (und leistungsfähiger), wenn Sie die Ereignisbehandlung an ein anderes Element delegieren, z. B. Ihre Tabelle
Auf diese Weise haben Sie nur einen Ereignishandler, und dies funktioniert auch für neu hinzugefügte Elemente. Dies erfordert jQuery> = 1.7
Andernfalls verwenden Sie delegate ()
quelle
Sie können die folgende Funktion addEvent () verwenden, um Ereignisse für die meisten Dinge hinzuzufügen. Beachten Sie jedoch, dass XMLHttpRequest
if (el.attachEvent)
in IE8 fehlschlägt, da es nicht unterstütztXMLHttpRequest.attachEvent()
und Sie esXMLHttpRequest.onload = function() {}
stattdessen verwenden müssen.quelle
Ich habe mich aufgrund der obigen Antworten für eine schnelle Polyfüllung entschieden:
Wie die obigen Antworten stellt dies natürlich nicht sicher, dass es
window.attachEvent
existiert, was ein Problem sein kann oder nicht.quelle
Wenn Sie jQuery verwenden, können Sie schreiben:
quelle
quelle