stopPropagation
evitará que los padres manipuladores de ser ejecutado stopImmediatePropagation
impedirá cualquier controlador de padres y también los otros manipuladores de ejecución
Ejemplo rápido de la documentación de 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>
Tenga en cuenta que el orden del enlace del evento es importante aquí.
$("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>
Un pequeño ejemplo para demostrar cómo funcionan estos dos paros de propagación.
Mostrar fragmento de código
Hay tres controladores de eventos vinculados. Si no detenemos ninguna propagación, entonces debería haber cuatro alertas: tres en el div secundario y una en el div primario.
Si detenemos la propagación del evento, habrá 3 alertas (todas en el div secundario interno). Como el evento no se propagará por la jerarquía DOM, el div padre no lo verá y su controlador no se activará.
Si detenemos la propagación de inmediato, solo habrá 1 alerta. Aunque hay tres controladores de eventos conectados al div secundario interno, solo se ejecuta 1 y cualquier otra propagación se elimina inmediatamente, incluso dentro del mismo elemento.
fuente
stopPropagation()
variantes también dejarán de propagarse por la jerarquía DOM. No solo arriba. Por favor revise mi respuesta para más detalles con la fase de captura.Desde la API jQuery :
En resumen:
event.stopPropagation()
permite que se ejecuten otros controladores en el mismo elemento, mientras queevent.stopImmediatePropagation()
evita que se ejecute cada evento.fuente
event.stopImmediatePropagation
no deja de burbujear, ¿verdad?stopImmediatePropagation
detiene el período de propagación del evento, ambos deben evitar el burbujeo, no vale la pena que también pueda cambiar el modo para capturar lo que activará primero los elementos más externos y solo entonces baja a los niños (el burbujeo es el valor predeterminado y funciona en la dirección opuesta)event.stopPropagation
evitará que se ejecuten controladores en elementos primarios.Las llamadas
event.stopImmediatePropagation
también evitarán que se ejecuten otros controladores en el mismo elemento.fuente
Llego tarde, pero tal vez pueda decir esto con un ejemplo específico:
Di, si tienes un
<table>
, con<tr>
, y luego<td>
. Ahora, supongamos que configura 3 controladores de eventos para el<td>
elemento, luego, si lo haceevent.stopPropagation()
en el primer controlador de eventos que configuró<td>
, todos los controladores de eventos<td>
seguirán ejecutándose , pero el evento simplemente no se propagará a<tr>
o<table>
(y no subir y subir a<body>
,<html>
,document
, ywindow
).Ahora, sin embargo, si usa
event.stopImmediatePropagation()
su primer controlador de eventos, entonces, los otros dos controladores de eventos para<td>
NO se ejecutarán , y no se propagarán hasta<tr>
,<table>
(y no subirán y subirán hasta<body>
,<html>
,document
, ywindow
).Tenga en cuenta que no es solo para
<td>
. Para otros elementos, seguirá el mismo principio.fuente
1)
event.stopPropagation():
=> Se utiliza para detener las ejecuciones de su controlador principal correspondiente únicamente.2)
event.stopImmediatePropagation():
=> Se utiliza para detener la ejecución de su controlador principal correspondiente y también el controlador o la función adjunta a sí mismo, excepto el controlador actual. => También detiene todo el controlador adjunto al elemento actual de DOM completo.Aquí está el ejemplo: Jsfiddle !
Gracias -Sahil
fuente
event.stopPropagation () permite que se ejecuten otros controladores en el mismo elemento, mientras que event.stopImmediatePropagation () evita que se ejecute cada evento. Por ejemplo, vea a continuación el bloque de código jQuery.
Si se usó event.stopPropagation en el ejemplo anterior, se disparará el siguiente evento click en el elemento p que cambia el css, pero en caso event.stopImmediatePropagation () , el siguiente evento p click no se disparará.
fuente
Sorprendentemente, ¡ todas las demás respuestas solo dicen la mitad de la verdad o están realmente equivocadas!
e.stopImmediatePropagation()
evita que se llame a otro controlador para este evento, sin excepcionese.stopPropagation()
es similar, pero aún llama a todos los controladores para esta fase en este elemento si no se ha llamado yaQue fase
Por ejemplo, un evento de clic siempre irá primero al DOM (llamado "fase de captura"), finalmente alcanzará el origen del evento ("fase de destino") y luego volverá a aparecer ("fase de burbuja"). Y con
addEventListener()
usted puede registrar múltiples controladores tanto para la captura como para la fase de burbuja de forma independiente. (La fase de destino llama a los manejadores de ambos tipos en el objetivo sin distinguir).Y esto es sobre lo que las otras respuestas son incorrectas:
Una explicación de la fase del evento fiddle y mozilla.org con demo.
fuente
Aquí estoy agregando mi ejemplo JSfiddle para stopPropagation vs stopImmediatePropagation. JSFIDDLE
fuente