stopPropagation
impede que o evento borbulhe na cadeia de eventos.
preventDefault
impede a ação padrão que o navegador faz nesse evento.
Exemplos
preventDefault
$("#but").click(function (event) {
event.preventDefault()
})
$("#foo").click(function () {
alert("parent click event fired!")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
stopPropagation
$("#but").click(function (event) {
event.stopPropagation()
})
$("#foo").click(function () {
alert("parent click event fired!")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
Com stopPropagation
, apenas o button
manipulador de cliques do é chamado enquanto o div
manipulador de cliques do nunca é acionado.
Onde você usa preventDefault
, apenas a ação padrão do navegador é interrompida, mas o manipulador de cliques da div ainda é acionado.
Abaixo estão alguns documentos sobre as propriedades e métodos do evento DOM do MDN:
Para o IE9 e o FF, você pode usar preventDefault e stopPropagation.
Para suportar o IE8 e inferior, substitua stopPropagation
por cancelBubble
e substitua preventDefault
porreturnValue
event.stop
funções ... Também estranho, nunca tive problemas com isso. Eu uso muito borbulhando. Obrigado pelo exemplo!cancelBubble
ereturnValue
são as duas propriedades (por isso deve ser definidocancelBubble = true;
), e quepreventDefault
estopPropagation
são métodos (por isso deve ser chamadopreventDefault();
)stopDefault()
que não funciona da mesma maneira questopPropagation()
. Se a ação padrão não está chamando oonclick
método, o que é?Terminologia
Do quirksmode.org :
Interface
Do w3.org , para captura de eventos :
Para o evento borbulhante :
Para cancelamento de evento :
Exemplos
Nos exemplos a seguir, um clique no hiperlink no navegador da Web dispara o fluxo do evento (os ouvintes de eventos são executados) e a ação padrão do destino do evento (uma nova guia é aberta).
HTML:
JavaScript:
Exemplo 1 : resulta na saída
Exemplo 2 : adicionando
stopPropagation()
à funçãoresulta na saída
O ouvinte de eventos impediu a propagação descendente e ascendente do evento. No entanto, isso não impediu a ação padrão (uma nova guia é aberta).
Exemplo 3 : adicionando
stopPropagation()
à funçãoou a função
resulta na saída
Isso ocorre porque os dois ouvintes de eventos são registrados no mesmo destino de evento. Os ouvintes do evento impediram a propagação para cima do evento. No entanto, eles não impediram a ação padrão (uma nova guia é aberta).
Exemplo 4 : adicionando
preventDefault()
a qualquer função, por exemploimpede que uma nova guia seja aberta.
fonte
retorna falso;
return false;
faz 3 coisas separadas quando você chama:event.preventDefault()
- Para o comportamento padrão do navegador.event.stopPropagation()
- Impede que o evento propague (ou "borbulhe") o DOM.Observe que esse comportamento difere dos manipuladores de eventos normais (não jQuery), nos quais, notavelmente,
return false
não impede que o evento borbulhe.preventDefault ();
preventDefault();
faz uma coisa: interrompe o comportamento padrão do navegador.Quando usá-los?
Sabemos o que eles fazem, mas quando usá-los? Simplesmente depende do que você deseja realizar. Use
preventDefault();
se você quiser "apenas" impedir o comportamento padrão do navegador. Use return false; quando você deseja impedir o comportamento padrão do navegador e impedir que o evento propague o DOM. Na maioria das situações em que você usaria return false; o que você realmente quer épreventDefault()
.Exemplos:
Vamos tentar entender com exemplos:
Veremos um exemplo puro de JAVASCRIPT
Exemplo 1:
Exemplo 2:
Exemplo 3:
Exemplo 4:
Exemplo 5:
casos:
Verá todos os três exemplos.
Espero que esses exemplos sejam claros. Tente executar todos esses exemplos em um arquivo html para ver como eles funcionam.
fonte
Esta é a citação daqui
Event.preventDefault
O método preventDefault impede que um evento execute sua funcionalidade padrão. Por exemplo, você usaria preventDefault em um elemento A para parar de clicar nesse elemento para sair da página atual:
Enquanto a funcionalidade padrão do elemento estiver emparedada, o evento continuará realçando o DOM.
Event.stopPropagation
O segundo método, stopPropagation, permite que a funcionalidade padrão do evento ocorra, mas impede a propagação do evento:
stopPropagation efetivamente impede que elementos pai conheçam um determinado evento em seu filho.
fonte
Event.preventDefault - interrompe o comportamento padrão do navegador. Agora vem o que é o comportamento padrão do navegador. Suponha que você tenha uma marca de âncora e ela possua um atributo href e essa marca de âncora esteja aninhada dentro de uma marca div que possui um evento de clique. O comportamento padrão da marca âncora é quando você clica na marca âncora em que deve navegar, mas o que event.preventDefault faz é interromper a navegação nesse caso. Mas isso nunca interrompe o borbulhar do evento ou a escalada do evento, ou seja,
O resultado será
"elemento foi clicado"
"o contêiner foi clicado"
Agora event.StopPropation para de borbulhar de evento ou de escalação de evento. Agora com o exemplo acima
O resultado será
"elemento foi clicado"
Para obter mais informações, consulte este link https://codeplanet.io/preventdefault-vs-stoppropagation-vs-stopimmediatepropagation/
fonte
event.preventDefault();
Interrompe a ação padrão de um elemento.event.stopPropagation();
Impede que o evento borbulhe na árvore DOM, impedindo que qualquer manipulador pai seja notificado sobre o evento.Por exemplo, se houver um link com um método click anexado dentro de
DIV
ouFORM
que também tenha um método click anexado, isso impedirá que o métodoDIV
ouFORM
click seja acionado.fonte
fonte