Dans quelle situation utiliserait-on la méthode isImmediatePropagationStopped de jQuery? Exemple sur leur page de documentation n'aide pas.Quand utiliser la méthode jQuery isImmediatePropagationStopped()?
Répondre
Si vous étiez dans une situation avec plusieurs événements .live()
par exemple, vous voudriez .stopImmediatePropagation()
puis vérifiez-le dans un gestionnaire suivant, puisque vous avez déjà passé au même élément. Prenons un exemple en direct:
$("a").live("click", function(e) {
alert("Handler 1");
e.stopImmediatePropagation();
}).live("click", function(e) {
alert("Handler 2");
});
You can test it here - remarquez les deux alertes encore le feu.
Même si nous nous arrêtons la propagation immédiatement, nous sommes à votre écoute à un niveau peu importe, donc nous avons vraiment besoin de le vérifier:
$("a").live("click", function(e) {
alert("Handler 1");
e.stopImmediatePropagation();
}).live("click", function(e) {
if(e.isPropagationStopped()) return;
alert("Handler 2");
});
You can test it here - seuls les premiers feux d'alerte, les résultat désiré. En fonction de votre ordre d'événement, la même situation se produit avec .delegate()
. Il y a d'autres exemples bien sûr, mais ce sont les situations que vous êtes susceptible de rencontrer dans un usage normal.
Je vois. J'ai en fait seulement un gestionnaire d'événement .live() sur un contrôle. Cependant, le contrôle est sur la page deux fois, par conséquent le gestionnaire est appelé deux fois. La définition et la vérification de ImmediatePropagation dans handler fonctionne mais je pense qu'une meilleure solution serait si l'événement était appelé une fois pour le contrôle qui a initié cet événement. –
Avec jquery 1.8, le premier exemple ne déclenche qu'un événement, la propagation de l'arrêt empêche l'autre –