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'attributevent.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="http://ipnx.cn/link/207f170979dd72ff5776e20d07c28732">More info</a> <button>Add to cart</button> </li> ... </ul> </div>
En utilisant la manipulation des événements traditionnels, nous devons connecter le gestionnaire d'événements à:
- Une image plus grande s'affiche lorsque l'utilisateur clique sur la vignette.
- Plus d'informations s'affichent lorsque l'utilisateur clique sur le lien "plus d'informations".
- Ajoutez l'image au panier lorsque l'utilisateur clique sur "Ajouter au panier".
- 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'); }); });
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'); }); });
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.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Il existe trois fa?ons courantes d'initier des demandes HTTP dans Node.js: utilisez des modules intégrés, Axios et Node-Fetch. 1. Utilisez le module HTTP / HTTPS intégré sans dépendances, ce qui convient aux scénarios de base, mais nécessite un traitement manuel de la couture des données et de la surveillance des erreurs, tels que l'utilisation de https.get () pour obtenir des données ou envoyer des demandes de post via .write (); 2.AXIOS est une bibliothèque tierce basée sur la promesse. Il a une syntaxe concise et des fonctions puissantes, prend en charge l'async / attendre, la conversion JSON automatique, l'intercepteur, etc. Il est recommandé de simplifier les opérations de demande asynchrones; 3.Node-Fetch fournit un style similaire à la récupération du navigateur, basé sur la promesse et la syntaxe simple

Les types de données JavaScript sont divisés en types primitifs et types de référence. Les types primitifs incluent la cha?ne, le nombre, le booléen, le nul, un non défini et le symbole. Les valeurs sont immuables et les copies sont copiées lors de l'attribution des valeurs, de sorte qu'elles ne se affectent pas; Les types de référence tels que les objets, les tableaux et les fonctions stockent les adresses de mémoire, et les variables pointant vers le même objet s'afferchent mutuellement. Le typeof et l'instance de OFF peuvent être utilisés pour déterminer les types, mais prêtent attention aux problèmes historiques de typeofnull. Comprendre ces deux types de différences peut aider à écrire un code plus stable et fiable.

Quel framework JavaScript est le meilleur choix? La réponse est de choisir la plus appropriée selon vos besoins. 1.RIATT est flexible et gratuit, adapté aux projets moyens et grands qui nécessitent une personnalisation élevée et des capacités d'architecture d'équipe; 2. Angular fournit des solutions complètes, adaptées aux applications au niveau de l'entreprise et à la maintenance à long terme; 3. Vue est facile à utiliser, adaptée à des projets de petite et moyenne taille ou à un développement rapide. De plus, s'il existe une pile technologique existante, la taille de l'équipe, le cycle de vie du projet et si le RSS est nécessaire sont également des facteurs importants dans le choix d'un cadre. En bref, il n'y a pas absolument le meilleur cadre, le meilleur choix est celui qui convient à vos besoins.

Bonjour, développeurs JavaScript! Bienvenue dans JavaScript News de cette semaine! Cette semaine, nous nous concentrerons sur: le différend de marque d'Oracle avec Deno, les nouveaux objets Time JavaScript sont pris en charge par les navigateurs, les mises à jour Google Chrome et certains outils de développeurs puissants. Commen?ons! Le différend de marque d'Oracle avec la tentative de Deno Oracle d'enregistrer une marque "JavaScript" a provoqué la controverse. Ryan Dahl, le créateur de Node.js et Deno, a déposé une pétition pour annuler la marque, et il pense que JavaScript est un niveau ouvert et ne devrait pas être utilisé par Oracle

Cacheapi est un outil fourni par le navigateur pour mettre en cache les demandes de réseau, qui est souvent utilisée en conjonction avec travailleur de service pour améliorer les performances du site Web et l'expérience hors ligne. 1. Il permet aux développeurs de stocker manuellement des ressources telles que des scripts, des feuilles de style, des photos, etc.; 2. Il peut faire correspondre les réponses du cache en fonction des demandes; 3. Il prend en charge la suppression des caches spécifiques ou la nettoyage du cache entier; 4. Il peut mettre en ?uvre des stratégies de priorité de cache ou de priorité de réseau grace à l'écoute des événements Fetch; 5. Il est souvent utilisé pour le support hors ligne, accélérez la vitesse d'accès répétée, préchargement des ressources clés et du contenu de mise à jour des antécédents; 6. Lorsque vous l'utilisez, vous devez faire attention au contr?le de la version du cache, aux restrictions de stockage et à la différence entre le mécanisme de mise en cache HTTP.

La promesse est le mécanisme central pour gérer les opérations asynchrones en JavaScript. Comprendre les appels de cha?ne, la gestion des erreurs et les combinants est la clé pour ma?triser leurs applications. 1. L'appel de la cha?ne renvoie une nouvelle promesse à travers. Puis () pour réaliser la concaténation des processus asynchrones. Chaque .then () re?oit le résultat précédent et peut renvoyer une valeur ou une promesse; 2. La gestion des erreurs doit utiliser .catch () pour attraper des exceptions pour éviter les défaillances silencieuses, et peut renvoyer la valeur par défaut dans Catch pour continuer le processus; 3. Combinateurs tels que promesse.all () (réussi avec succès uniquement après tout succès), promesse.race () (le premier achèvement est retourné) et promesse.allsetTled () (en attente de toutes les achèvements)

Des méthodes intégrées de la matrice JavaScript telles que .map (), .filter () et .reduce () peuvent simplifier le traitement des données; 1) .map () est utilisé pour convertir les éléments un en un pour générer de nouveaux tableaux; 2) .filter () est utilisé pour filtrer les éléments par condition; 3) .reduce () est utilisé pour agréger les données en tant que valeur unique; Une mauvaise utilisation doit être évitée lorsqu'elle est utilisée, entra?nant des effets secondaires ou des problèmes de performance.

La boucle d'événement de JavaScript gère les opérations asynchrones en coordonnant les piles d'appels, les webapis et les files d'attente de taches. 1. La pile d'appels exécute du code synchrone, et lors de la rencontre de taches asynchrones, il est remis à WebAPI pour le traitement; 2. Une fois que le WebAPI a terminé la tache en arrière-plan, il met le rappel dans la file d'attente correspondante (macro tache ou micro tache); 3. La boucle d'événement vérifie si la pile d'appels est vide. S'il est vide, le rappel est retiré de la file d'attente et poussé dans la pile d'appels pour l'exécution; 4. Micro taches (comme Promise. puis) ??prendre la priorité sur les taches macro (telles que Settimeout); 5. Comprendre la boucle d'événements permet d'éviter de bloquer le thread principal et d'optimiser l'ordre d'exécution du code.
