Was ist der Unterschied zwischen event.stopPropagation()
et event.stopImmediatePropagation()
?
Nur um sicher zu gehen, die native Javascript-Version von event.stopImmediatePropagation
nicht aufhört zu sprudeln, richtig?
Was ist der Unterschied zwischen event.stopPropagation()
et event.stopImmediatePropagation()
?
De la jQuery-API :
Zusätzlich zur Aufbewahrung aller zusätzlichen Handler für ein Element nicht ausgeführt werden ausgeführt werden, stoppt diese Methode auch das Blubbern durch impliziten Aufruf von event.stopPropagation(). Um einfach zu verhindern, dass das Ereignis an Vorgängerelementen zu verhindern, aber anderen Event-Handler auf demselben Element auszuführen Element auszuführen, können wir event.stopPropagation() stattdessen verwenden.
Verwenden Sie event.isImmediatePropagationStopped() um zu wissen ob diese Methode jemals aufgerufen wurde (für dieses Ereignisobjekt).
Kurz gesagt: event.stopPropagation()
ermöglicht die Ausführung anderer Handler für dasselbe Element, während event.stopImmediatePropagation()
verhindert jede Ereignis von der Ausführung.
Nur um sicher zu gehen, die native Javascript-Version von event.stopImmediatePropagation
nicht aufhört zu sprudeln, richtig?
Wenn das Ereignis an die übergeordneten Elemente weitergegeben wird, spricht man von Bubbling, stopImmediatePropagation
stoppt die Ausbreitung des Ereignisses, beide sollten Blasenbildung verhindern, es ist nichts wert, dass Sie auch den Modus auf erfassen die zuerst die äußersten Elemente auslöst und erst dann zu abajo für die Kinder (Blasenbildung ist die Standardeinstellung und funktioniert in umgekehrter Richtung)
Das ist gelinde gesagt nicht genau. Das Anhalten in der Erfassungsphase bewirkt nicht zulassen Bubble-Handler auf demselben Element, die als in meiner Antwort erklärt.
1) event.stopPropagation():
=>Er wird nur verwendet, um die Ausführung des entsprechenden übergeordneten Handlers zu stoppen.
2) event.stopImmediatePropagation():
=> Er wird verwendet, um die Ausführung des entsprechenden übergeordneten Handlers und aller an ihn angehängten Handler oder Funktionen außer dem aktuellen Handler zu stoppen. => Er stoppt auch alle Handler, die mit dem aktuellen Element des gesamten DOM verbunden sind.
Hier ist das Beispiel: Jsfiddle ¡!
Danke! -Sahil
Hier ist eine Demo, die den Unterschied verdeutlicht:
document.querySelectorAll("button")[0].addEventListener('click', e=>{
e.stopPropagation();
alert(1);
});
document.querySelectorAll("button")[1].addEventListener('click', e=>{
e.stopImmediatePropagation();
alert(1);
});
document.querySelectorAll("button")[0].addEventListener('click', e=>{
alert(2);
});
document.querySelectorAll("button")[1].addEventListener('click', e=>{
alert(2);
});
<div onclick="alert(3)">
<button>1...2</button>
<button>1</button>
</div>
Beachten Sie, dass Sie mehrere Ereignisbehandler an ein Ereignis eines Elements anhängen können.
Der Unterschied besteht also darin, dass die div
ist der Elternteil der button
die angeklickt wurde, stopPropagation()
stellt sicher, dass 3
nie alarmiert wird, während stopImmediatePropagation()
stellt sicher, dass nicht einmal andere Ereignislisten, die auf der button
selbst, d.h. 2
ausgeführt werden.
event.stopPropagation() ermöglicht die Ausführung anderer Handler für dasselbe Element, während event.stopImmediatePropagation() verhindert, dass jedes Ereignis ausgeführt wird. Siehe zum Beispiel den folgenden jQuery-Codeblock.
$("p").click(function(event)
{ event.stopImmediatePropagation();
});
$("p").click(function(event)
{ // This function won't be executed
$(this).css("color", "#fff7e3");
});
Wenn event.stopPropagation im vorherigen Beispiel verwendet wurde, wird das nächste Klick-Ereignis auf das p-Element, das die CSS ändert, ausgelöst, aber im Fall event.stopImmediatePropagation() wird das nächste p-Klick-Ereignis nicht ausgelöst.
Hier füge ich mein JSfiddle Beispiel für stopPropagation vs stopImmediatePropagation hinzu. JSFIDDLE
let stopProp = document.getElementById('stopPropagation');
let stopImmediate = document.getElementById('stopImmediatebtn');
let defaultbtn = document.getElementById("defalut-btn");
stopProp.addEventListener("click", function(event){
event.stopPropagation();
console.log('stopPropagation..')
})
stopProp.addEventListener("click", function(event){
console.log('AnotherClick')
})
stopImmediate.addEventListener("click", function(event){
event.stopImmediatePropagation();
console.log('stopimmediate')
})
stopImmediate.addEventListener("click", function(event){
console.log('ImmediateStop Another event wont work')
})
defaultbtn.addEventListener("click", function(event){
alert("Default Clik");
})
defaultbtn.addEventListener("click", function(event){
console.log("Second event defined will also work same time...")
})
div{
margin: 10px;
}
<p>
The simple example for event.stopPropagation and stopImmediatePropagation?
Please open console to view the results and click both button.
</p>
<div >
<button id="stopPropagation">
stopPropagation-Button
</button>
</div>
<div id="grand-div">
<div class="new" id="parent-div">
<button id="stopImmediatebtn">
StopImmediate
</button>
</div>
</div>
<div>
<button id="defalut-btn">
Normat Button
</button>
</div>
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
12 Stimmen
Ich ermutige den Leser, sich nicht nur an die akzeptierte Antwort zu halten, sondern auch die anderen Antworten zu lesen, insbesondere die von Robert Siemer, die sehr aufschlussreich ist. Um sie zu verstehen, ist eine gute Kenntnis der Funktionsweise der Ausbreitung erforderlich.