Table des matières
Comment fonctionne la délégation des événements dans jQuery?
Quelle est la différence entre les événements directs et les événements délégués dans jQuery?
Comment utiliser la méthode .on() pour effectuer une délégation d'événements dans jQuery?
Puis-je utiliser le délégué d'événements pour gérer des éléments ajoutés dynamiquement dans jQuery?
Qu'est-ce que la bulle d'événements, et qu'est-ce que cela a à voir avec la délégation des événements à jQuery?
Comment arrêter la propagation des événements dans jQuery?
Puis-je utiliser le délégué des événements pour gérer les événements personnalisés dans jQuery?
Comment supprimer le gestionnaire d'événements à jQuery?
Maison interface Web js tutoriel Délégation d'événements avec jQuery

Délégation d'événements avec jQuery

Feb 24, 2025 am 09:22 AM

Event Delegation with jQuery

Points de base

  • Les délégués d'événements en jQuery sont une technique pour attacher un seul gestionnaire d'événements à un élément parent au lieu de plusieurs gestionnaires attachés à des éléments individuels, réduisant ainsi l'utilisation de la mémoire et améliorant les performances.
  • Fonction jQuery on() peut être utilisée pour implémenter le délégué d'événements, et le deuxième paramètre facultatif spécifie le sélecteur pour le gestionnaire d'événements du délégué. Utilisez ensuite l'attribut event.target pour identifier quel élément a déclenché l'événement.
  • Dans les applications dynamiques, les éléments sont souvent ajoutés ou supprimés, et les délégués d'événements sont particulièrement utiles car il élimine la nécessité de gérer les événements manuellement et réduit la complexité du code. Cependant, il convient de noter que le gestionnaire de sous-événements gère avant de déléguer le gestionnaire d'événements et peut empêcher l'événement de se propager.

jQuery simplifie la gestion des événements en javascript. Cependant, plus les gestionnaires d'événements sont définis, plus il y a de mémoire, ce qui entraînera éventuellement une dégradation des performances et ralentir l'interface utilisateur. Cet article explore comment les délégués d'événements peuvent aider à prévenir cela et comment les délégués d'événements peuvent être appliqués dans jQuery. Les délégués d'événements sont une technique de traitement d'événements qui, au lieu de ajouter un gestionnaire d'événements, est directement à chaque élément qui est d'écouter un événement, il ajoute un seul gestionnaire d'événements à l'élément parent de ces éléments pour écouter pour ses éléments enfants. Lors du traitement d'un événement, vérifiez quel élément déclenche l'événement et répond en conséquence. Les délégués d'événements dépendent des bulles d'événements dans le DOM. Il s'agit du processus d'événements déclenchés sur les enfants se propageant à l'arbre Dom à son élément parent et à son élément parent, etc. jusqu'à ce qu'il atteigne le document. Les programmeurs peuvent utiliser event.stopPropagation() pour arrêter de bouillonner. Notez que tous les événements DOM ne se propageront pas, le focale, le brouillage, la charge et le déchargement ne le feront pas. Les délégués d'événements utilisent moins de mémoire car vous remplacez plusieurs gestionnaires d'événements par un seul gestionnaire d'événements. Par exemple, si vous joignez un gestionnaire d'événements à chaque lien dans la liste des dix liens, dix gestionnaires d'événements occupent un espace mémoire. Au lieu de cela, si vous utilisez des délégués d'événements et gérez les événements sur l'élément parent, un seul gestionnaire d'événements est créé et moins de mémoire est utilisée que la mémoire attachée à chaque lien séparément. En plus de réduire la consommation de mémoire, la délégation des événements présente également les avantages suivants:

  • Pas besoin de gérer manuellement les événements lors de l'ajout d'éléments ou de supprimer des éléments de DOM. Si nous utilisons la gestion des événements traditionnels, nous devons attacher le gestionnaire d'événements à l'élément ajouté au DOM et supprimer le gestionnaire d'événements de l'élément supprimé du DOM.
  • Réduisez le code à gérer avec moins de gestionnaires d'événements. Cela peut simplifier notre code sans aucune logique de traitement des événements en double, ce qui aide à garder notre javascript concis et sec.

Exemple de délégation d'événements dans jQuery

Supposons que vous développez une application à une seule page qui vend des photos de chaton. Lorsque la page se charge, les 20 meilleurs chatons seront affichés. Lorsque l'utilisateur fait défiler la page, plus de chatons seront chargés. Notre HTML ressemble à ceci:

<div id="cats">
  <ul>
    <li>
      <img src="/static/imghw/default1.png"  data-src="https://img.php.cn/"  class="lazy" alt=""/>
      <a href="https://www.php.cn/link/207f170979dd72ff5776e20d07c28732">More info</a>
      <button>Add to cart</button>
    </li>
    ...
  </ul>
</div>
Copier après la connexion

En utilisant la manipulation des événements traditionnels, nous devons connecter le gestionnaire d'événements à:

  1. Une image plus grande s'affiche lorsque l'utilisateur clique sur la vignette.
  2. Plus d'informations s'affichent lorsque l'utilisateur clique sur le lien "plus d'informations".
  3. Ajoutez l'image au panier lorsque l'utilisateur clique sur "Ajouter au panier".
  4. attacher ces trois événements au nouvel élément DOM ajouté lorsque l'utilisateur fait défiler la page.

Ce code sera similaire à l'exemple suivant. Notez que cela est destiné à montrer comment l'ajout d'un gestionnaire d'événements vers des éléments individuels diffère de l'utilisation des délégués d'événements, il n'y a donc aucune implémentation prévue pour loadImage(), moreInfo(), addToCart() et loadNewKittens() fonctions.

$(document).ready(function() {
  var cats = $('#cats');

  cats.find('img')
    .on('click', function() {
      loadImage();
    })

  cats.find('a')
    .on('click', function(event) {
      event.preventDefault();
      moreInfo();
    });

  cats.find('button')
    .on('click', function() {
      addToCart();
    });

  $(window).scroll(function() {
    var fragment = loadNewKittens();
    // 为新的DOM元素附加事件处理程序
    fragment.find('img')
      .on('click', function() {
        loadImage();
      });

    fragment.find('a')
      .on('click', function(event) {
        event.preventDefault();
        moreInfo();
      });

    fragment.find('button')
      .on('click', function() {
        addToCart();
      });

    fragment.appendTo('#cats ul');
  });
});
Copier après la connexion

Le volume de code est assez grand. Voyons maintenant à quoi ressemble notre code si nous utilisons les délégués d'événements:

$(document).ready(function() {
  $('#cats')
    .on('click', 'img, a, button', function(event) {
      event.preventDefault();
      var target = event.target;

      switch(target.tagName.toLowerCase()) {
        case 'img':
          loadImage();
          break;
        case 'a':
          moreInfo();
          break;
        case 'button':
          addToCart();
          break;
        default:
          // 什么也不做
      }
    });

  $(window).scroll(function() {
    var fragment = loadNewKittens();
    fragment.appendTo('#cats ul');
  });
});
Copier après la connexion

La clé réside dans le deuxième paramètre facultatif de on(). En passant le sélecteur ici, on() sait qu'il gère le gestionnaire d'événements du délégué au lieu du gestionnaire d'événements directement lié. Notre code de gestion des événements est beaucoup plus simple maintenant. En obtenant event.target et en commutant en fonction de son tagName, nous pouvons déterminer quel élément a déclenché l'événement et répondre en conséquence. De plus, nous n'avons plus besoin d'attacher des gestionnaires d'événements aux éléments chargés dans $(window).scroll, car les événements déclenchés par ces nouveaux éléments sont délégués à l'élément parent. Un "piège" potentiel à noter lors de l'utilisation des délégués d'événements est que tout gestionnaire d'événements attaché à un élément enfant est géré avant que le gestionnaire d'événements délégate ne déclenche . Par conséquent, le gestionnaire de sous-événements peut appeler ou retourner event.stopPropagation(), ce qui empêchera l'événement de bouillonner dans le gestionnaire d'événements du délégué et vous laissera perplexe expliquant pourquoi votre événement n'est pas délégué. false

Conclusion

Dans cet article, nous étudions la délégation des événements. Nous avons vu comment cela peut aider à améliorer les performances d'un site Web en réduisant la charge de traitement des événements qu'il doit supporter. Nous avons également vu comment implémenter le délégué d'événements dans jQuery via la fonction

. on()

Les questions fréquemment posées sur la délégation de l'événement jQuery

Qu'est-ce que le délégué des événements à jQuery et pourquoi cela compte?

Les délégués d'événements en jQuery sont une technique qui vous permet de joindre un seul auditeur d'événements à l'élément parent, qui tirera pour tous les descendants de sélecteurs assortis, que ces descendants existent maintenant ou s'ajoutent à l'avenir. Ceci est important car il peut considérablement améliorer les performances en réduisant le nombre de gestionnaires d'événements requis par l'application. Au lieu d'ajouter des gestionnaires d'événements individuels à chaque élément, vous pouvez déléguer des événements aux éléments parents. Ceci est particulièrement utile dans les applications dynamiques où les éléments sont ajoutés ou supprimés dynamiquement.

Comment fonctionne la délégation des événements dans jQuery?

Les délégués d'événements en jQuery profitent du fait que la plupart des événements jQuery bouillonner ou se propageront à l'arbre Dom. Lorsqu'un événement est licencié sur un élément enfant, il bouillonnera à son élément parent. En ajoutant un auditeur d'événements à l'élément parent, vous pouvez capturer des événements déclenchés sur l'un de ses éléments enfants. L'attribut event.target peut être utilisé pour déterminer quel élément enfant a déclenché l'événement.

Quelle est la différence entre les événements directs et les événements délégués dans jQuery?

Les événements directs sont directement attachés à des éléments spécifiques, et seuls ces éléments peuvent déclencher des événements. D'un autre côté, les événements délégués sont attachés à l'élément parent et tout élément enfant peut déclencher des événements. L'avantage des événements délégués est qu'ils peuvent gérer des événements d'éléments enfants ajoutés dynamiquement.

Comment utiliser la méthode .on() pour effectuer une délégation d'événements dans jQuery?

La méthode .on() dans jQuery est utilisée pour attacher des gestionnaires d'événements. Pour les délégués d'événements, vous utiliserez trois paramètres: type d'événement, chaîne de sélecteur utilisée pour filtrer les descendants et les fonctions de gestionnaire. Un type d'événement est une chaîne représentant le type d'événement (par exemple, "cliquez"), une chaîne de sélecteur est utilisée pour filtrer les descendants de l'élément sélectionné qui déclenche l'événement, et une fonction de gestionnaire est une fonction à exécuter lorsque l'événement est déclenché.

Puis-je utiliser le délégué d'événements pour gérer des éléments ajoutés dynamiquement dans jQuery?

Oui, l'un des principaux avantages des délégués d'événements dans jQuery est qu'il peut gérer des événements d'éléments qui sont ajoutés dynamiquement. Étant donné que l'écouteur d'événements est attaché à l'élément parent, il peut capturer des événements déclenchés sur l'un de ses éléments enfants, même si ces événements sont ajoutés après l'attachement de l'écouteur de l'événement.

Qu'est-ce que la bulle d'événements, et qu'est-ce que cela a à voir avec la délégation des événements à jQuery?

L'événement Bubble est un type de propagation d'événement dans lequel un événement commence par l'élément spécifique qui le déclenche puis bouillonne vers ses ancêtres. Les délégués d'événements dans jQuery utilisent des bulles d'événements pour joindre les écouteurs d'événements aux éléments parents. Lorsqu'un événement est licencié sur un élément enfant, il bouillonnera à l'élément parent, où l'écouteur de l'événement peut le capturer.

Comment arrêter la propagation des événements dans jQuery?

Vous pouvez utiliser la méthode .stopPropagation() pour arrêter la propagation des événements dans jQuery. Cette méthode empêche les événements de bouillonner dans l'arbre Dom, empêchant ainsi tout gestionnaire parent de recevoir des notifications d'événements. Cependant, vous devez l'utiliser avec prudence car cela rendra votre code plus difficile à déboguer et à comprendre.

Quelle est la différence entre les méthodes

et .bind() utilisées pour le traitement des événements dans jQuery? .on()

La méthode

dans jQuery est utilisée pour attacher un gestionnaire d'événements directement à un élément. D'un autre côté, la méthode .bind() peut être utilisée pour attacher un gestionnaire d'événements directement à un élément (tel que .on()) ou à un élément parent pour la déléguation des événements. La méthode .bind() est plus générale et est la méthode préférée pour attacher des gestionnaires d'événements dans jQuery. .on()

Puis-je utiliser le délégué des événements pour gérer les événements personnalisés dans jQuery?

Oui, vous pouvez utiliser le délégué des événements pour gérer les événements personnalisés dans jQuery. Comme les événements standard, vous pouvez joindre un écouteur d'événements à un élément parent, qui capturera des événements personnalisés déclenchés sur l'un de ses enfants.

Comment supprimer le gestionnaire d'événements à jQuery?

Vous pouvez utiliser la méthode .off() pour supprimer le gestionnaire d'événements dans jQuery. Cette méthode peut être utilisée pour supprimer tous les gestionnaires d'événements sur un élément, ou pour supprimer uniquement les gestionnaires d'événements avec un type d'événement spécifique ou un espace de noms connecté.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1666
14
Tutoriel PHP
1273
29
Tutoriel C#
1252
24
Moteurs JavaScript: comparaison des implémentations Moteurs JavaScript: comparaison des implémentations Apr 13, 2025 am 12:05 AM

Différents moteurs JavaScript ont des effets différents lors de l'analyse et de l'exécution du code JavaScript, car les principes d'implémentation et les stratégies d'optimisation de chaque moteur diffèrent. 1. Analyse lexicale: convertir le code source en unité lexicale. 2. Analyse de la grammaire: générer un arbre de syntaxe abstrait. 3. Optimisation et compilation: générer du code machine via le compilateur JIT. 4. Exécuter: Exécutez le code machine. Le moteur V8 optimise grâce à une compilation instantanée et à une classe cachée, SpiderMonkey utilise un système d'inférence de type, résultant en différentes performances de performances sur le même code.

Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisation Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisation Apr 16, 2025 am 12:12 AM

Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

De C / C à JavaScript: comment tout cela fonctionne De C / C à JavaScript: comment tout cela fonctionne Apr 14, 2025 am 12:05 AM

Le passage de C / C à JavaScript nécessite de s'adapter à la frappe dynamique, à la collecte des ordures et à la programmation asynchrone. 1) C / C est un langage dactylographié statiquement qui nécessite une gestion manuelle de la mémoire, tandis que JavaScript est dynamiquement typé et que la collecte des déchets est automatiquement traitée. 2) C / C doit être compilé en code machine, tandis que JavaScript est une langue interprétée. 3) JavaScript introduit des concepts tels que les fermetures, les chaînes de prototypes et la promesse, ce qui améliore la flexibilité et les capacités de programmation asynchrones.

Javascript et le web: fonctionnalité de base et cas d'utilisation Javascript et le web: fonctionnalité de base et cas d'utilisation Apr 18, 2025 am 12:19 AM

Les principales utilisations de JavaScript dans le développement Web incluent l'interaction client, la vérification du formulaire et la communication asynchrone. 1) Mise à jour du contenu dynamique et interaction utilisateur via les opérations DOM; 2) La vérification du client est effectuée avant que l'utilisateur ne soumette les données pour améliorer l'expérience utilisateur; 3) La communication de rafraîchissement avec le serveur est réalisée via la technologie AJAX.

JavaScript en action: Exemples et projets du monde réel JavaScript en action: Exemples et projets du monde réel Apr 19, 2025 am 12:13 AM

L'application de JavaScript dans le monde réel comprend un développement frontal et back-end. 1) Afficher les applications frontales en créant une application de liste TODO, impliquant les opérations DOM et le traitement des événements. 2) Construisez RestulAPI via Node.js et Express pour démontrer les applications back-end.

Comprendre le moteur JavaScript: détails de l'implémentation Comprendre le moteur JavaScript: détails de l'implémentation Apr 17, 2025 am 12:05 AM

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python vs JavaScript: communauté, bibliothèques et ressources Python vs JavaScript: communauté, bibliothèques et ressources Apr 15, 2025 am 12:16 AM

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Python vs JavaScript: environnements et outils de développement Python vs JavaScript: environnements et outils de développement Apr 26, 2025 am 12:09 AM

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.

See all articles