Maison interface Web js tutoriel Introduction détaillée à la délégation d'événements JavaScript (avec code)

Introduction détaillée à la délégation d'événements JavaScript (avec code)

Mar 15, 2019 pm 02:23 PM
javascript délégation d'événement 前端

Cet article vous apporte une introduction détaillée à la délégation d'événements JavaScript (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

La délégation d'événements (également connue sous le nom de proxy d'événements) utilise le bouillonnement d'événements pour gérer tous les événements d'un certain type en spécifiant un seul gestionnaire d'événements.

Il existe un exemple très frappant de « livraison express » concernant la délégation d'événements sur Internet. Ici, je vais y apporter quelques modifications et extensions, puis illustrer le mécanisme de délégation d'événements à travers des programmes.

Il y a trois employés dans une entreprise, et leur adresse de livraison express est l'entreprise. Chaque fois qu'une livraison express est livrée, le coursier appelle leur numéro pour les avertir, et ils vont récupérer le colis après réception du colis. appel.

员工ID 员工名称 联系方式
A 111111
B 222222
C 333333
correspond à la page, c'est-à-dire que chaque employé est une marque :
<ul id="前台工作人员">
    <li id="A">员工甲</li>
    <li id="B">员工乙</li>
    <li id="C">员工丙</li>
</ul>
Copier après la connexion

Le comportement de chaque employé répondant au téléphone pour récupérer le coursier est un événement. Ici, nous supposons que le comportement de. récupérer le coursier correspond à l'événement onclick :

A.onclik = function() {
    收取快递;
};
B.onclick = function() {
    收取快递;
};
C.onclick = function() {
    收取快递;
};
Copier après la connexion

Ce qui précède est généralement mis en œuvre en parcourant chaque employé et en ajoutant des événements :

/*程序1*/
var aUl = document.getElemengtByID("前台工作人员");
var aLi = aUl.getElemengtsByTagName("li");
for (var i = 0; i < aLi.length; i++) {
    aLi[i].onclick = function() {
        收取快递;
    }
}
Copier après la connexion

Comme vous pouvez le voir, définir un événement pour chaque employé générera du code redondant qui occupe de la mémoire et effectue plusieurs opérations DOM (en interaction avec les nœuds DOM), affectant les performances d'exécution des pages.

« La réduction des opérations DOM est l'une des idées principales de l'optimisation des performances »

Nous avons donc naturellement pensé : pourquoi le personnel de la réception ne peut-il pas signer pour la livraison express pour nous ?

<ul id="前台工作人员">
    <li id="A">员工甲</li>
    <li id="B">员工乙</li>
    <li id="C">员工丙</li>
</ul>

/*程序2*/
var tel = document.getElementById("前台工作人员");
tel.onclick = function() {
    收取快递;
}
Copier après la connexion

Supposons qu'à ce moment-là, le coursier appelle pour informer l'employé A de récupérer le colis (onclick), mais que le nœud DOM

  • 🎜>onclick ( Le personnel récupère la livraison express. Comme vous pouvez le constater, de cette manière, non seulement la quantité de code est réduite, mais le nombre d'interactions avec les nœuds DOM est également réduit. Il y a un autre avantage : lors de l'ajout d'un nouveau nœud DOM, l'effet événementiel de l'élément parent est automatiquement reporté. En d'autres termes, lorsqu'un nouvel employé Ding arrive dans l'entreprise, le personnel de la réception l'aidera directement à récupérer la livraison express sans organiser d'événement spécialement pour lui.

    Par exemple, lorsqu'un nouvel employé Ding arrive dans l'entreprise :

    Dans un programme qui n'utilise pas de délégation d'événements, il n'y a pas d'événement pour l'employé nouvellement ajouté We. besoin d'utiliser une fonction Contenir le programme 1 :

    ...
    <input type="button" id="btn" value="添加新员工">
    ...
    
    ...
    /*程序3*/
    var aBtn = document.getElementById("btn");
    aBtn.onclick = function() {
        var aLi = document.createElement("li");
        oLi.innerHTML = "员工丁";
        aUl.appendChild(aLi);
    }
    ...
    Copier après la connexion
    Ensuite, exécutez cette fonction à la fin du programme qui ajoute un nouvel employé D :

    /*程序4*/
    function pro1() {
        var aUl = document.getElemengtByID("前台工作人员");
        var aLi = aUl.getElemengtsByTagName("li");
        for (var i = 0; i < aLi.length; i++) {
            aLi[i].onclick = function() {
                收取快递;
            }
        }
    }
    Copier après la connexion
    L'inconvénient de ceci est évident : le nombre d'interactions de nœuds DOM multiplié.

    Si nous utilisons le mécanisme de délégation d'événement pour implémenter cela, ce problème n'existera pas. L'événement onclick du nœud d'élément enfant sera exécuté directement sur le nœud d'élément parent.

    /*程序5*/
    var aBtn = document.getElementById("btn");
    aBtn.onclick = function() {
        ...
        pro1();
    }
    Copier après la connexion
    A ce stade, nous penserons : pour le même type d'événement, il est très pratique d'utiliser la délégation d'événement pour le placer sur le nœud de l'élément parent. Mais si vous souhaitez exécuter différents événements pour différents nœuds d'éléments enfants, pouvez-vous toujours utiliser la délégation d'événements ?


    La réponse est oui.

    Par exemple, les trois employés de l'entreprise ci-dessus utilisent toujours des marques fixes de livraison express :

    L'employé A aime utiliser STO Express car c'est bon marché, et STO ne livre que dans le parc gate;

    L'employé B est membre de JD.com et achète toujours les produits auto-exploités de JD.com, et JD.com les livrera en bas par livraison express
    • L'employé C est un SF ; Express VIP et SF Express les livreront dans le hall de l'étage où ils se trouvent.
    • Après que tous les trois ont reçu l'appel, le personnel de la réception a dû se rendre à différents endroits pour récupérer les articles. Pour les programmes qui n'utilisent pas la délégation d'événements, des événements de traitement uniques doivent être définis. pour chaque personne :
    Au moins trois opérations DOM sont requises et des fonctions d'événement sont définies pour chaque nœud correspondant.

    Et si la délégation d'événements est utilisée :
    var A = document.getElementById("A");
    var B = document.getElementById("B");
    var C = document.getElementById("C");
    
    A.onclick = function() {
        去园区大门取快递;
    }
    B.onclick = function() {
        去楼下取快递;
    }
    C.onclick = function() {
        去本层大厅取快递;
    }
    Copier après la connexion

    De cette façon, il n'y a qu'une seule opération DOM et d'autres opérations sont effectuées dans JS, ce qui peut améliorer efficacement les performances des pages Web.

    Ce qui précède est l'idée de base de la délégation événementielle JS. En bref, la fonctionnalité de diffusion d'événements est utilisée pour gérer les événements, réduire le code redondant, réduire les créations inutiles et réduire les opérations interactives afin d'économiser de la mémoire et d'améliorer les performances.
    var aUl = document.getElemengtByID("前台工作人员");
    aUl.onclick = function (ev) {
        var target = ev || window.event; /*兼容浏览器*/
        var target = ev.target || ev.srcElement; /*兼容浏览器*/
        if (target.nodeName.toLocaleLowerCase() == "li") {
            switch(target.id) {
                case "A" :
                    去园区大门取快递;
                    break;
                case "B" :
                    去楼下取快递;
                    break;
                case "C" :
                    去本层大厅取快递;
                    break;
            }
        }
    }
    Copier après la connexion

    Bulling d'événement

    Le bouillonnement d'événement se produit lorsqu'un nœud d'élément DOM est déclenché. Si le nœud n'a pas d'événement correspondant, vérifiez si son élément parent a un événement correspondant. Si tel est le cas, exécutez. sinon, continuez à vérifier vers le haut. A cela correspond la capture d'événement

    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 !

    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)

    PHP et Vue : une combinaison parfaite d'outils de développement front-end PHP et Vue : une combinaison parfaite d'outils de développement front-end Mar 16, 2024 pm 12:09 PM

    PHP et Vue : une combinaison parfaite d'outils de développement front-end À l'ère actuelle de développement rapide d'Internet, le développement front-end est devenu de plus en plus important. Alors que les utilisateurs ont des exigences de plus en plus élevées en matière d’expérience des sites Web et des applications, les développeurs front-end doivent utiliser des outils plus efficaces et plus flexibles pour créer des interfaces réactives et interactives. En tant que deux technologies importantes dans le domaine du développement front-end, PHP et Vue.js peuvent être considérés comme une arme parfaite lorsqu'ils sont associés. Cet article explorera la combinaison de PHP et Vue, ainsi que des exemples de code détaillés pour aider les lecteurs à mieux comprendre et appliquer ces deux éléments.

    Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

    Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

    Questions fréquemment posées par les enquêteurs front-end Questions fréquemment posées par les enquêteurs front-end Mar 19, 2024 pm 02:24 PM

    Lors des entretiens de développement front-end, les questions courantes couvrent un large éventail de sujets, notamment les bases HTML/CSS, les bases JavaScript, les frameworks et les bibliothèques, l'expérience du projet, les algorithmes et les structures de données, l'optimisation des performances, les requêtes inter-domaines, l'ingénierie front-end, les modèles de conception et les nouvelles technologies et tendances. Les questions de l'intervieweur sont conçues pour évaluer les compétences techniques du candidat, son expérience en matière de projet et sa compréhension des tendances du secteur. Par conséquent, les candidats doivent être parfaitement préparés dans ces domaines pour démontrer leurs capacités et leur expertise.

    Django est-il front-end ou back-end ? Vérifiez-le! Django est-il front-end ou back-end ? Vérifiez-le! Jan 19, 2024 am 08:37 AM

    Django est un framework d'application Web écrit en Python qui met l'accent sur un développement rapide et des méthodes propres. Bien que Django soit un framework Web, pour répondre à la question de savoir si Django est un front-end ou un back-end, vous devez avoir une compréhension approfondie des concepts de front-end et de back-end. Le front-end fait référence à l'interface avec laquelle les utilisateurs interagissent directement, et le back-end fait référence aux programmes côté serveur. Ils interagissent avec les données via le protocole HTTP. Lorsque le front-end et le back-end sont séparés, les programmes front-end et back-end peuvent être développés indépendamment pour mettre en œuvre respectivement la logique métier et les effets interactifs, ainsi que l'échange de données.

    Explorer la technologie front-end du langage Go : une nouvelle vision du développement front-end Explorer la technologie front-end du langage Go : une nouvelle vision du développement front-end Mar 28, 2024 pm 01:06 PM

    En tant que langage de programmation rapide et efficace, le langage Go est très populaire dans le domaine du développement back-end. Cependant, peu de gens associent le langage Go au développement front-end. En fait, l’utilisation du langage Go pour le développement front-end peut non seulement améliorer l’efficacité, mais également ouvrir de nouveaux horizons aux développeurs. Cet article explorera la possibilité d'utiliser le langage Go pour le développement front-end et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre ce domaine. Dans le développement front-end traditionnel, JavaScript, HTML et CSS sont souvent utilisés pour créer des interfaces utilisateur.

    Django : Un framework magique capable de gérer à la fois le développement front-end et back-end ! Django : Un framework magique capable de gérer à la fois le développement front-end et back-end ! Jan 19, 2024 am 08:52 AM

    Django : Un framework magique capable de gérer à la fois le développement front-end et back-end ! Django est un framework d'application Web efficace et évolutif. Il est capable de prendre en charge plusieurs modèles de développement Web, notamment MVC et MTV, et peut facilement développer des applications Web de haute qualité. Django prend non seulement en charge le développement back-end, mais peut également créer rapidement des interfaces frontales et obtenir un affichage de vue flexible via un langage de modèle. Django combine le développement front-end et le développement back-end dans une intégration transparente, afin que les développeurs n'aient pas à se spécialiser dans l'apprentissage.

    Combinaison de Golang et de technologie front-end : découvrez comment Golang joue un rôle dans le domaine front-end Combinaison de Golang et de technologie front-end : découvrez comment Golang joue un rôle dans le domaine front-end Mar 19, 2024 pm 06:15 PM

    Combinaison de Golang et de la technologie front-end : pour explorer le rôle de Golang dans le domaine front-end, des exemples de code spécifiques sont nécessaires. Avec le développement rapide d'Internet et des applications mobiles, la technologie front-end est devenue de plus en plus importante. Dans ce domaine, Golang, en tant que puissant langage de programmation back-end, peut également jouer un rôle important. Cet article explorera comment Golang est combiné avec la technologie front-end et démontrera son potentiel dans le domaine front-end à travers des exemples de code spécifiques. Le rôle de Golang dans le domaine front-end est celui d'un outil efficace, concis et facile à apprendre.

    Comment obtenir facilement le code d'état HTTP en JavaScript Comment obtenir facilement le code d'état HTTP en JavaScript Jan 05, 2024 pm 01:37 PM

    Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service

    See all articles