stopPropagation
evita que el evento burbujee en la cadena de eventos.
preventDefault
evita la acción predeterminada que realiza el navegador en ese evento.
Ejemplos
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>
Con stopPropagation
, solo se llama al button
controlador de clics mientras que el div
controlador de clics nunca se activa.
Donde, como si lo usa preventDefault
, solo se detiene la acción predeterminada del navegador, pero el controlador de clics del div aún se activa.
A continuación se presentan algunos documentos sobre las propiedades y métodos de eventos DOM de MDN:
Para IE9 y FF puede usar preventDefault & stopPropagation.
Para admitir IE8 y versiones inferiores, reemplace stopPropagation
con cancelBubble
y reemplace preventDefault
conreturnValue
event.stop
funciones ... También es raro que nunca haya tenido problemas con eso. Yo uso mucho burbujear. Gracias por el ejemplo!cancelBubble
yreturnValue
son ambas propiedades (por lo tanto, debe establecersecancelBubble = true;
), y esopreventDefault
ystopPropagation
son métodos (por lo que debería llamarsepreventDefault();
)stopDefault()
no funciona de la misma manerastopPropagation()
. Si la acción predeterminada no llama alonclick
método, ¿qué es?Terminología
De quirksmode.org :
Interfaz
Desde w3.org , para la captura de eventos :
Para eventos burbujeantes :
Para cancelación de eventos :
Ejemplos
En los siguientes ejemplos, un clic en el hipervínculo en el navegador web activa el flujo del evento (se ejecutan los oyentes del evento) y la acción predeterminada del objetivo del evento (se abre una nueva pestaña).
HTML:
JavaScript:
Ejemplo 1 : da como resultado la salida
Ejemplo 2 : agregar
stopPropagation()
a la funciónresultados en la salida
El oyente del evento evitó una mayor propagación hacia abajo y hacia arriba del evento. Sin embargo, no impidió la acción predeterminada (una nueva pestaña de apertura).
Ejemplo 3 : agregar
stopPropagation()
a la funcióno la función
resultados en la salida
Esto se debe a que ambos oyentes de eventos están registrados en el mismo objetivo de evento. Los oyentes del evento impidieron una mayor propagación ascendente del evento. Sin embargo, no impidieron la acción predeterminada (una nueva pestaña de apertura).
Ejemplo 4 : agregar
preventDefault()
a cualquier función, por ejemploevita que se abra una nueva pestaña.
fuente
falso retorno;
return false;
hace 3 cosas separadas cuando lo llamas:event.preventDefault()
- Detiene el comportamiento predeterminado de los navegadores.event.stopPropagation()
- Evita que el evento propague (o "burbujee") el DOM.Tenga en cuenta que este comportamiento difiere de los controladores de eventos normales (no jQuery), en los que, en particular,
return false
no impide que el evento brote.preventDefault ();
preventDefault();
hace una cosa: detiene el comportamiento predeterminado de los navegadores.¿Cuándo usarlos?
Sabemos lo que hacen, pero ¿cuándo usarlos? Simplemente depende de lo que quieras lograr. Úselo
preventDefault();
si desea "simplemente" evitar el comportamiento predeterminado del navegador. Use return false; cuando desee evitar el comportamiento predeterminado del navegador y evitar que el evento propague el DOM. En la mayoría de las situaciones en las que usaría return false; lo que realmente quiere espreventDefault()
.Ejemplos:
Tratemos de entender con ejemplos:
Veremos puro ejemplo de JAVASCRIPT
Ejemplo 1:
Ejemplo 2
Ejemplo 3
Ejemplo 4
Ejemplo 5:
casos:
Veremos los tres ejemplos.
Espero que estos ejemplos sean claros. Intente ejecutar todos estos ejemplos en un archivo html para ver cómo funcionan.
fuente
Esta es la cita de aquí.
Event.preventDefault
El método preventDefault evita que un evento lleve a cabo su funcionalidad predeterminada. Por ejemplo, usaría preventDefault en un elemento A para dejar de hacer clic en ese elemento para que no salga de la página actual:
Si bien la funcionalidad predeterminada del elemento está bloqueada, el evento continúa burbujeando el DOM.
Event.stopPropagation
El segundo método, stopPropagation, permite que ocurra la funcionalidad predeterminada del evento pero evita que el evento se propague:
stopPropagation efectivamente impide que los elementos primarios sepan sobre un evento dado en su hijo.
fuente
Event.preventDefault- detiene el comportamiento predeterminado del navegador. Ahora viene lo que es el comportamiento predeterminado del navegador. Suponga que tiene una etiqueta de anclaje y que tiene un atributo href y esta etiqueta de anclaje está anidada dentro de una etiqueta div que tiene un evento de clic. El comportamiento predeterminado de la etiqueta de anclaje es cuando se hace clic en la etiqueta de anclaje por la que debe navegar, pero lo que hace event.preventDefault es detener la navegación en este caso. Pero nunca detiene el burbujeo del evento o la escalada del evento, es decir
El resultado será
"se hizo clic en el elemento"
"se hizo clic en el contenedor"
Ahora event.StopPropation detiene el burbujeo del evento o la escalada del evento. Ahora con el ejemplo anterior
El resultado será
"se hizo clic en el elemento"
Para obtener más información, consulte este enlace https://codeplanet.io/preventdefault-vs-stoppropagation-vs-stopimmediatepropagation/
fuente
event.preventDefault();
Detiene la acción predeterminada de un elemento.event.stopPropagation();
Impide que el evento forme burbujas en el árbol DOM, evitando que los controladores principales sean notificados del evento.Por ejemplo, si hay un enlace con un método de clic adjunto dentro de
DIV
oFORM
que también tiene un método de clic adjunto, evitará que se active el métodoDIV
oFORM
clic.fuente
fuente