Respostas:
stopPropagation
impedirá qualquer pais manipuladores sejam executados stopImmediatePropagation
irá impedir quaisquer manipuladores de pais e também quaisquer outros manipuladores de execução
Exemplo rápido da documentação do jquery:
$("p").click(function(event) {
event.stopImmediatePropagation();
});
$("p").click(function(event) {
// This function won't be executed
$(this).css("background-color", "#f00");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>example</p>
Observe que a ordem da ligação do evento é importante aqui!
Um pequeno exemplo para demonstrar como essas interrupções de propagação funcionam.
Existem três manipuladores de eventos vinculados. Se não pararmos nenhuma propagação, deve haver quatro alertas - três na div filho e um na div pai.
Se pararmos a propagação do evento, haverá 3 alertas (todos na div filho interna). Como o evento não se propaga na hierarquia do DOM, a div pai não o vê e seu manipulador não é acionado.
Se pararmos a propagação imediatamente, haverá apenas 1 alerta. Mesmo que haja três manipuladores de eventos conectados à div filho interna, apenas 1 é executado e qualquer propagação adicional é eliminada imediatamente, mesmo dentro do mesmo elemento.
stopPropagation()
variantes também param de se propagar na hierarquia do DOM. Não apenas para cima. Por favor, verifique minha resposta para obter detalhes com a fase de captura.
Na API jQuery :
Além de impedir a execução de manipuladores adicionais em um elemento, esse método também interrompe a interferência chamando implicitamente event.stopPropagation (). Para simplesmente impedir que o evento borbulhe nos elementos ancestrais, mas permita que outros manipuladores de eventos sejam executados no mesmo elemento, podemos usar event.stopPropagation ().
Use event.isImmediatePropagationStopped () para saber se esse método já foi chamado (nesse objeto de evento).
Resumindo: event.stopPropagation()
permite que outros manipuladores no mesmo elemento sejam executados, enquanto event.stopImmediatePropagation()
impede a execução de todos os eventos.
event.stopImmediatePropagation
não para de borbulhar, certo?
stopImmediatePropagation
impede que o evento seja propagado, ambos devem evitar borbulhamento, não vale nada que você também possa alterar o modo de captura que acionará os elementos mais externos primeiro e só então ir para baixo para as crianças (borbulhante é o padrão, e trabalha na direção oposta)
event.stopPropagation
impedirá a execução de manipuladores nos elementos pai.
A chamada event.stopImmediatePropagation
também impedirá a execução de outros manipuladores no mesmo elemento.
Estou atrasado, mas talvez eu possa dizer isso com um exemplo específico:
Diga, se você tem um <table>
, com <tr>
e então <td>
. Agora, digamos que você defina 3 manipuladores de eventos para o <td>
elemento, se você fizer event.stopPropagation()
no primeiro manipulador de eventos definido <td>
, todos os manipuladores de eventos <td>
ainda serão executados , mas o evento não será propagado para <tr>
ou <table>
(e não será ir para cima e até <body>
, <html>
, document
, e window
).
Agora, no entanto, se você usar event.stopImmediatePropagation()
no seu manipulador primeiro evento, em seguida, os outros dois manipuladores de eventos para <td>
não será executado , e não irá propagar-se para <tr>
, <table>
(e não vai subir e até <body>
, <html>
, document
, e window
).
Note que não é apenas para <td>
. Para outros elementos, seguirá o mesmo princípio.
1) event.stopPropagation():
=> É usado para parar as execuções de seu manipulador pai correspondente.
2) event.stopImmediatePropagation():
=> É usado para interromper a execução de seu manipulador pai correspondente e também manipulador ou função anexada a ele mesmo, exceto o manipulador atual. => Ele também interrompe todo o manipulador anexado ao elemento atual de todo o DOM.
Aqui está o exemplo: Jsfiddle !
Obrigado, -Sahil
event.stopPropagation () permite que outros manipuladores no mesmo elemento sejam executados, enquanto event.stopImmediatePropagation () impede a execução de todos os eventos. Por exemplo, veja abaixo o bloco de código jQuery.
$("p").click(function(event)
{ event.stopImmediatePropagation();
});
$("p").click(function(event)
{ // This function won't be executed
$(this).css("color", "#fff7e3");
});
Se event.stopPropagation foi usado no exemplo anterior, o próximo evento click no elemento p que altera o css será acionado , mas no caso event.stopImmediatePropagation () , o próximo evento p click não será acionado .
Surpreendentemente, todas as outras respostas dizem apenas metade da verdade ou estão realmente erradas!
e.stopImmediatePropagation()
impede que qualquer manipulador adicional seja chamado para este evento, sem exceçõese.stopPropagation()
é semelhante, mas não ainda chamar todos os manipuladores para esta fase em este elemento se não já chamadoQue fase?
Por exemplo, um evento de clique sempre percorre primeiro o DOM (chamado "fase de captura"), finalmente alcança a origem do evento ("fase de destino") e depois borbulha novamente ("fase de bolha"). E addEventListener()
você pode registrar vários manipuladores para a fase de captura e bolha independentemente. (A fase de destino chama manipuladores de ambos os tipos no destino sem distinção.)
E é sobre isso que as outras respostas estão incorretas:
Uma explicação da fase de eventos do violino e do mozilla.org com demonstração.
Aqui estou adicionando meu exemplo JSfiddle para stopPropagation vs stopImmediatePropagation. 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>