stopPropagation
empêchera tout gestionnaire parent d'être exécuté stopImmediatePropagation
empêchera tout gestionnaire parent et tout autre gestionnaire de s'exécuter
Exemple rapide de la documentation 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>
Notez que l'ordre de la liaison d'événement est important ici!
$("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 petit exemple pour montrer comment ces deux arrêts de propagation fonctionnent.
Afficher l'extrait de code
Il existe trois gestionnaires d'événements liés. Si nous n'arrêtons aucune propagation, il devrait y avoir quatre alertes - trois sur la division enfant et une sur la division parent.
Si nous empêchons l'événement de se propager, il y aura alors 3 alertes (toutes sur la division enfant intérieure). Étant donné que l'événement ne se propage pas dans la hiérarchie DOM, le div parent ne le voit pas et son gestionnaire ne se déclenche pas.
Si nous arrêtons immédiatement la propagation, il n'y aura qu'une seule alerte. Même s'il existe trois gestionnaires d'événements attachés à la division enfant intérieure, un seul est exécuté et toute propagation ultérieure est immédiatement interrompue, même dans le même élément.
la source
stopPropagation()
variantes cesseront également de se propager dans la hiérarchie DOM. Pas seulement vers le haut. Veuillez vérifier ma réponse pour plus de détails sur la phase de capture.Depuis l' API jQuery :
En bref:
event.stopPropagation()
permet d'exécuter d'autres gestionnaires sur le même élément, tout enevent.stopImmediatePropagation()
empêchant chaque événement de s'exécuter.la source
event.stopImmediatePropagation
ne cesse de bouillonner, non?stopImmediatePropagation
empêche l'événement de se propager pendant une période, les deux devraient empêcher le bouillonnement, cela ne vaut rien que vous puissiez également changer le mode de capture qui déclenchera les éléments les plus externes en premier et descendez ensuite vers les enfants (le bouillonnement est la valeur par défaut et fonctionne dans la direction opposée)event.stopPropagation
empêchera les gestionnaires des éléments parents de s'exécuter.L'appel
event.stopImmediatePropagation
empêchera également l'exécution d'autres gestionnaires sur le même élément.la source
Je suis un retardataire, mais je peux peut-être le dire avec un exemple précis:
Dites, si vous avez un
<table>
, avec<tr>
, puis<td>
. Supposons maintenant que vous définissez 3 gestionnaires d'événements pour l'<td>
élément, puis si vous le faitesevent.stopPropagation()
dans le premier gestionnaire d'événements que vous définissez<td>
, tous les gestionnaires d'événements pour<td>
seront toujours exécutés , mais l'événement ne se propagera tout simplement pas vers<tr>
ou<table>
(et ne monter et jusqu'à<body>
,<html>
,document
etwindow
).Maintenant, cependant, si vous utilisez
event.stopImmediatePropagation()
dans votre premier gestionnaire d'événements, puis, les deux autres gestionnaires d'événements pour<td>
ne fonctionnera pas , et ne se propagent pas à<tr>
,<table>
(et ne va pas et jusqu'à<body>
,<html>
,document
etwindow
).Notez que ce n'est pas seulement pour
<td>
. Pour les autres éléments, il suivra le même principe.la source
1)
event.stopPropagation():
=> Il est utilisé pour arrêter uniquement les exécutions de son gestionnaire parent correspondant.2)
event.stopImmediatePropagation():
=> Il est utilisé pour arrêter l'exécution de son gestionnaire parent correspondant ainsi que le gestionnaire ou la fonction attaché à lui-même à l'exception du gestionnaire actuel. => Il arrête également tous les gestionnaires attachés à l'élément courant de l'ensemble du DOM.Voici l'exemple: Jsfiddle !
Merci, -Sahil
la source
event.stopPropagation () permet d' exécuter d' autres gestionnaires sur le même élément, tandis que event.stopImmediatePropagation () empêche chaque événement de s'exécuter. Par exemple, voir ci-dessous le bloc de code jQuery.
Si event.stopPropagation a été utilisé dans l'exemple précédent, le prochain événement click sur l'élément p qui modifie le css se déclenchera, mais dans le cas event.stopImmediatePropagation () , l'événement p click suivant ne se déclenchera pas.
la source
Étonnamment, toutes les autres réponses ne disent que la moitié de la vérité ou sont en fait fausses!
e.stopImmediatePropagation()
empêche tout autre gestionnaire d'être appelé pour cet événement, sans exceptione.stopPropagation()
est similaire, mais appelle toujours tous les gestionnaires de cette phase sur cet élément s'il n'est pas déjà appeléQuelle phase?
Par exemple, un événement de clic ira toujours tout le long du DOM (appelé «phase de capture»), atteindra finalement l'origine de l'événement («phase cible»), puis remontera («phase de bulle»). Et avec
addEventListener()
vous, vous pouvez enregistrer plusieurs gestionnaires indépendamment pour la capture et la phase à bulles. (La phase cible appelle des gestionnaires des deux types sur la cible sans distinction.)Et voici ce que les autres réponses sont incorrectes:
Une explication de la phase de l'événement fiddle et mozilla.org avec démo.
la source
Ici, j'ajoute mon exemple JSfiddle pour stopPropagation vs stopImmediatePropagation. JSFIDDLE
la source