Was bedeutet der dritte Parameter (false) in
document.addEventListener("deviceready",OnDeviceReady,false);
Kann jemand ein Beispielskript zeigen, um den Unterschied zu zeigen
iJade
Was bedeutet der dritte Parameter (false) in
document.addEventListener("deviceready",OnDeviceReady,false);
Kann jemand ein Beispielskript zeigen, um den Unterschied zu zeigen
Dies hat historische Gründe. Als das Browser-Ereignissystem zum ersten Mal entworfen wurde, gab es zwei widersprüchliche Möglichkeiten, seine Funktionsweise zu modellieren. Sie wurden Event Capture und Event Bubbling genannt.
Nehmen Sie zum Beispiel diesen HTML-Code:
<html>
<body>
<a href="#">Content</a>
</body>
</html>
Wenn ein Ereignis (z. B. ein Klick) auf dem passiert a
Element, sollten die Vorfahrenelemente es wissen? Es wurde allgemein akzeptiert, dass sie dies tun sollten. Aber die Frage war in welcher Reihenfolge sie sollten benachrichtigt werden. Die Microsoft- und Netscape-Entwickler (das sollte Ihnen eine Vorstellung davon geben, wie wie wir reden hier von historisch!) waren unterschiedlicher Meinung.
Ein Modell war die Ereigniserfassung (befürwortet von den Netscape-Entwicklern). Dies teilte die mit html
Element zuerst und arbeitete sich den Baum hinunter:
html
body
a
Das andere Modell war Event Bubbling (befürwortet von den Microsoft-Entwicklern). Dies benachrichtigte zuerst das Zielelement und arbeitete sich den Baum hinauf:
a
body
html
Der letztendliche Kompromiss war, dass es reichen sollte beide.
html
(Capture-Phase)body
(Capture-Phase)a
(Capture-Phase)a
(sprudelnde Phase)body
(Blubberphase)html
(sprudelnde Phase)Das Ereignis arbeitet sich also im Baum nach unten und dann wieder nach oben.
Das ist ein umständlicher Weg dorthin addEventListener
. addEventListener
überwacht sowohl Capture-Phase- als auch Blubbling-Phase-Ereignisse. Der dritte Parameter (genannt useCapture
in der Spezifikation) ermöglicht dem Programmierer anzugeben, welche Phase er verwenden möchte.
In modernen Browsern ist dies standardmäßig false
. Sie werden wahrscheinlich nie auf einen Umstand stoßen, in dem Sie die Erfassungsphase verwenden möchten, zumal der Internet Explorer sie immer noch nicht unterstützt. Aber alte Browser brauchen die false
um explizit zu sein, daher wird es im Allgemeinen für die Abwärtskompatibilität bereitgestellt.
+1 ausgezeichnete Erklärung, danke!
– Pankaj Khairnar
21. Juli 2014 um 6:36 Uhr
Wow! Danke danke danke. Besser kann man das auch vom MDN nicht erklären.
– Nick Rameau
9. August 2014 um 13:18 Uhr
IE 9 und höher unterstützen jetzt die Erfassungsphase.
– Rap
19. November 2014 um 14:21 Uhr
Dies sollte aufgrund der großartigen Erklärung die akzeptierte Antwort sein!
– Iwan Dokow
30. April 2015 um 10:35 Uhr
Deshalb liebe ich gelegentlich Stack Overflow. Ich kannte diese Trivia nie. Und es ist aus vielen Gründen nützlich, es zu wissen. Vielen Dank.
– Jamesnotjim
24. September 2018 um 14:53 Uhr
Leben
Es ist useCapture:
Wenn
true
,useCapture
zeigt an, dass der Benutzer die Aufnahme initiieren möchte. Nach dem Einleiten der Erfassung werden alle Ereignisse des angegebenen Typs an die registrierten gesendetlistener
bevor sie an irgendwelche versendet werdenEventTarget
s darunter im DOM-Baum. Ereignisse, die durch den Baum nach oben sprudeln, lösen keinen Listener aus, der für die Verwendung von Capture bestimmt ist. Sehen DOM-Level-3-Ereignisse
für eine ausführliche Erklärung.
Update 2017: Wie von @lonesomeday erklärt, ist es die useCapture Parameter. Mit modernen Browsern
false
wird fast immer verwendet. Seitfalse
die Standardeinstellung ist, können Sie den dritten Parameter einfach weglassen, es sei denn, Sie müssen wirklich alte Browser unterstützen.– Rinogo
20. Januar 2017 um 20:03 Uhr