Was bedeutet der dritte Parameter (false) in document.addEventListener(“deviceready”,OnDeviceReady,false); [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
iJade

Was bedeutet der dritte Parameter (false) in

document.addEventListener("deviceready",OnDeviceReady,false);

Kann jemand ein Beispielskript zeigen, um den Unterschied zu zeigen

  • Update 2017: Wie von @lonesomeday erklärt, ist es die useCapture Parameter. Mit modernen Browsern false wird fast immer verwendet. Seit false 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


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

Benutzer-Avatar
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 gesendet listener bevor sie an irgendwelche versendet werden EventTargets 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.

1246150cookie-checkWas bedeutet der dritte Parameter (false) in document.addEventListener(“deviceready”,OnDeviceReady,false); [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy