1. Informationen zum Abrufen des Ereignisobjekts
FF ist etwas stur und unterstützt nur Argumente[0] und kein window.event. Diesmal mache ich dem IE wirklich keine Vorwürfe. Auch wenn die Verwendung von Ereignissen als Fensterattribut gegen die Norm verstößt, hat sich jeder mit der Existenz dieses kleinen Problems abgefunden. Nur FF war nach so vielen Jahren einzigartig. Daher gibt es zwei Möglichkeiten, browserübergreifende Ereignisobjekte abzurufen:
Mit Ginseng:
1 2 3 4 |
|
Ohne Ginseng:
1 2 3 4 |
|
Eine Methode muss insbesondere erklärt werden: HTMLs Methode auf DOM0-Ebene, Ereignishandler mit Parametern, wie folgt:
1 2 3 4 |
|
Die obige Methode ist mit allen Browsern kompatibel, aber die Nachteile der Verwendung der DOM0-Ebenenmethode von HTML liegen auf der Hand, sodass sie nicht wie die ersten beiden zu einer Mainstream-Methode geworden ist und die DOM0-Ebenenmethode von JS über eine Ereignisverarbeitung mit Parametern verfügt , wie folgt:
1 2 3 4 5 |
|
Diese Methode ist nicht mit allen Browsern kompatibel, [IE8-] wird nicht unterstützt, IE9 ist unbekannt, FF und Chrome unterstützen sie. Ich dachte immer, dass die Ereignisverarbeitung auf DOM0-Ebene von HTML und die Ereignisverarbeitung auf DOM0-Ebene von JS gleichwertig seien. Jetzt habe ich viele Experimente durchgeführt und festgestellt, dass es einen Unterschied zwischen den beiden gibt
2. Informationen zum Abrufen der Ereignisquelle
event.srcElement ist die einzige Methode für [IE8-], IE9 ist unbekannt, andere Browser unterstützen die Standardmethode event.target
3. Über das Standardverhalten von Blockierungsereignissen
event.preventDefault() ist eine Standardmethode, aber [IE8-] unterstützt sie nicht. Die IE-eigene Methode ist event.returnValue = false;
4. In Bezug auf die Eindämmung der Ausbreitung von Ereignissen
event.stopPropagation() ist eine Standardmethode. Er möchte hier so vorgehen: event.cancelBubble = true; Weit vom Standard entfernt und einfach zu bedienen
5. Informationen zum Hinzufügen und Entfernen von Event-Handlern
DOM-Level-0-Methode
ele.onclick = handler;ele.onclick=null;Der älteste Weg
Vorteile: Kompatibel mit allen Browsern
Nachteil: Das gleiche Ereignis kann nur einen Ereignishandler binden/entbinden
DOM-Level-2-Methode
1 |
|
Und IE-Modus: ele.attach/detachEvent(‘on’ eventType, handler);
Vorteile: Unterstützt das Binden/Entbinden mehrerer Event-Handler
Nachteile: Die Kompatibilität muss beurteilt werden. Es ist zu beachten, dass der letzte Parameter in der Standardmethode angibt, ob während der Ereigniserfassungsphase eine Bindung/Entbindung erfolgen soll. IE unterstützt keine Ereigniserfassung, daher gibt es keinen dritten Parameter
Hinweis: Bei der IE-Methode unterscheidet sich nicht nur der Methodenname vom Standard, sondern auch der Ereignistyp im Parameter muss mit „on“ hinzugefügt werden, andernfalls ist die Bindung ungültig, es wird jedoch kein Fehler gemeldet
6. Browserübergreifende Ereignisbehandlung
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
|
Umfassendes Beispiel
Wenn im Projekt keine Bibliothek wie jQuery verwendet wird, wie kann man dann einfach Ereignisse an Elemente binden und sie mit verschiedenen Browsern kompatibel machen? Das folgende einfache Dienstprogramm sollte in Betracht gezogen werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
Anwendungsbeispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|