La délégation d'événements peut être un sujet déroutant pour ceux qui ne connaissent pas le concept. Mais heureusement, c'est très simple. Dans ce tutoriel vidéo, je vais vous présenter le concept en moins de quatre minutes..
Au lieu de cela, avec la délégation d'événement, nous ajoutons simplement un écouteur d'événement unique à un élément ancêtre, peut-être quelque chose comme un "ul". Ensuite, lorsque l'utilisateur clique sur l'un de ses éléments enfants, comme une balise d'ancrage, nous vérifions uniquement si la cible du clic était bien une balise d'ancrage. Si c'était le cas, nous procédons comme d'habitude.
$ ('ul'). click (fonction (e) if ($ (e.target) .is ('a')) alert ('cliqué'););
Cela fonctionne à cause de la façon dont les éléments sont capturés (pas IE) et bouillonnent. Par exemple, considérons la structure simple suivante.
Lorsque vous cliquez sur la balise d'ancrage, vous cliquez également sur les éléments 'li' et 'ul' et même sur 'body'. C'est ce qu'on appelle bouillonner.
Veuillez garder à l'esprit qu'il ne s'agit que d'un exemple simple pour expliquer la fonctionnalité. Nous avons utilisé jQuery, uniquement parce que j’avais quatre minutes pour enregistrer! Dans cet exemple particulier (regardez le screencast en premier), nous aurions pu utiliser deux options:
Cela visait principalement à démontrer l'idée. Avec JavaScript, vous pouvez faire quelque chose comme:
// Obtient une liste non ordonnée contenant les balises d'ancrage var ul = document.getElementById ('items'); // Gestionnaire d'évènements inter-navigateurs simple et rapide - pour compenser la fonction de gestionnaire d'attachement d'IE d'Internet addEvent (obj, evt, fn, capture) if (window.attachEvent) obj.attachEvent ("on" + evt, fn); else if (! capture) capture = false; // capture obj.addEventListener (evt, fn, capture) // Vérifiez si le noeud sur lequel vous avez cliqué est une balise d'ancrage. Si c'est le cas, procédez comme d'habitude. addEvent (ul, "click", function (e) // Firefox et IE ont respectivement accès à l'élément cible. e.target et event.srcElement, respectivement. var target = e? e.target: window.event.srcElement; if (target.nodeName.toLowerCase () === 'a') alert ("clicked"); renvoyer false;);