Tut stopPropgation beenden die Veranstaltung von der Propagierung in der capture-phase?
War ich bei der Suche http://www.quirksmode.org/js/events_order.html und es ist nicht eindeutig in diesem Artikel:
In der Microsoft-Modell müssen Sie die Veranstaltung
cancelBubble
Eigenschafttrue
.window.event.cancelBubble = true
In der W3C-Modell müssen Sie rufen Sie die Veranstaltung
stopPropagation()
Methode.e.stopPropagation()
Dies Stoppt die Vermehrung der Veranstaltung in der bubbling-phase.
Also meine Frage ist:
- Wenn ein Ereignis-listener festgelegt ist, zu hören in der capture-phase, funktioniert es automatisch nicht weiter propagieren, um die inneren Elemente?
- Oder, wenn es nicht weiter propagieren, hat Berufung
e.stopPropagation()
stoppen, oder bedeutet das nur Arbeit für die bubble phase?
- ^ genau. lol
- guter Punkt, Jungs. :S Scannen meiner letzten Beiträge jetzt und prüfen akzeptieren, wenn ich müßte. must_be_better_citizen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, einen Ereignis-listener hört nicht alle Ereignisse, die sich aus der Propagierung, es sei denn, Sie ausdrücklich auffordern. Der Teil auf den Sie sich beziehen, befasst sich mit der bubble-phase spezifisch. IE-Modell nicht unterstützt, event capturing - full stop. die capture-phase ist, was vorangeht, die bubbling-phase:
document
, und senkt sich nach unten in den DOM, gegenüber dem element, an dem das Ereignis ausgelöst wurde. Danach sprudelt es zurück bis zu dem Dokument. Bei jedem Schritt zwischen diesem Prozess kann beendet werden, unabhängig davon, dass es während der Aufnahme oder der bubble phase.stopPropagation
Methode. Dies werde dazu führen, dass zwei Alarme zeigenKurze Antwort: Die Reihenfolge ist:
Wenn Sie anrufen
e.stopPropagation()
in der capture-phase (Einstellung deraddEventListener()
's 3. argument zutrue
), hält es bei 1, so 2 & 3 kann es nicht empfangen.Wenn Sie anrufen
e.stopPropagation()
in der bubble-phase (Einstellung deraddEventListener()
's 3. argument zufalse
oder einfach nur nicht zuordnen), die 1 & 2 sind bereits abgeschlossen, so dass es nur verhindert, dass die Veranstaltung von brodelt das Niveau, wo Sie anrufenstopPropagation()
.event.stopPropagation()
hält einen Fall aus der absteigenden obwohl die restlichenevent.target
's Vorfahren? Oder ist es verhindert nur, dass die Phasen 2 und 3, in der Erwägung, dass phase 1 abgeschlossen wird, egal was?stopPropagation() wird nicht aufhören, die erfassten Ereignis-handler immer genannt. stopPropagation() Stoppt das sprudelte event-handler immer genannt.
Jsfiddle
JS:
CSS:
HTML:
addEventListener
fehlt. Die akzeptierte Antwort ist richtig.