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!
$("p").click(function(event) {
// This function will now trigger
$(this).css("background-color", "#f00");
});
$("p").click(function(event) {
event.stopImmediatePropagation();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>example</p>
Um pequeno exemplo para demonstrar como essas interrupções de propagação funcionam.
Mostrar snippet de código
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.
fonte
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 :
Resumindo:
event.stopPropagation()
permite que outros manipuladores no mesmo elemento sejam executados, enquantoevent.stopImmediatePropagation()
impede a execução de todos os eventos.fonte
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.fonte
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ê fizerevent.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
, ewindow
).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
, ewindow
).Note que não é apenas para
<td>
. Para outros elementos, seguirá o mesmo princípio.fonte
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
fonte
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.
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 .
fonte
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.
fonte
Aqui estou adicionando meu exemplo JSfiddle para stopPropagation vs stopImmediatePropagation. JSFIDDLE
fonte