J'essaie de comprendre cette différence particulière entre la direct y délégué à l'aide de la fonction jQuery .on() méthode . En particulier, la dernière phrase de ce paragraphe :
Lorsqu'un
selector
est fourni, le gestionnaire d'événement est appelé délégué . Le gestionnaire n'est pas appelé lorsque l'événement se produit directement sur l'élément lié, mais uniquement pour les descendants (éléments internes) qui correspondent au sélecteur. jQuery bulle l'événement depuis la cible de l'événement jusqu'à l'élément auquel le gestionnaire est attaché (c'est-à-dire de l'élément le plus interne à l'élément le plus externe) et exécute le gestionnaire pour tous les éléments le long de ce chemin qui correspondent au sélecteur.
Que signifie "exécute le gestionnaire pour tout élément" ? J'ai créé un page de test pour expérimenter le concept. Mais les deux constructions suivantes conduisent au même comportement :
$("div#target span.green").on("click", function() {
alert($(this).attr("class") + " is clicked");
});
ou,
$("div#target").on("click", "span.green", function() {
alert($(this).attr("class") + " is clicked");
});
Peut-être quelqu'un pourrait-il se référer à un autre exemple pour clarifier ce point ? Merci de votre compréhension.
7 votes
Pour tous les intéressés : jsperf.com/jquery-fn-on-delegate-vs-direct
1 votes
@KevinWheeler J'ai commenté votre violon ci-dessous mais ici En fait, il n'est pas correctement configuré (vous vous liez à l'élément parent, et la délégation est destinée aux enfants). Pour répondre à votre question, cela signifie que le gestionnaire délégué correspondra aux éléments nouvellement ajoutés, alors que celui qui n'est pas délégué ne le fera pas. La délégation présente l'avantage d'avoir moins d'événements accrochés au navigateur, ce qui réduit la consommation de mémoire pour l'application, mais la contrepartie est qu'elle augmente le temps de traitement d'un clic (de façon minimale). Si vous créez un jeu, ne déléguez pas.
1 votes
La "page de test" à laquelle vous faites référence ne fonctionne pas.