Maison interface Web js tutoriel Une brève analyse du contenu entre la liaison d'événement js, l'écoute d'événement et la délégation d'événement

Une brève analyse du contenu entre la liaison d'événement js, l'écoute d'événement et la délégation d'événement

Aug 23, 2018 pm 03:01 PM
délégation d'événement 事件监听 事件绑定

Le contenu de cet article concerne une brève analyse de la liaison d'événements js, de la surveillance des événements et de la délégation d'événements. J'espère que cela vous sera utile.

1. Liaison d'événements
Pour que JavaScript réponde aux opérations de l'utilisateur, vous devez d'abord lier les fonctions de traitement d'événements aux éléments DOM. La fonction dite de traitement d'événements est une fonction qui traite les opérations des utilisateurs. Différentes opérations correspondent à des noms différents.
Il existe trois méthodes couramment utilisées pour lier des événements :
(1) Lier les événements directement dans le DOM
Nous pouvons lier en cliquant sur l'élément DOM, en survolant la souris , onmouseout, onmousedown, onmouseup, ondblclick, onkeydown, onkeypress, onkeyup, etc.

<input type="button" value="click me" onclick="hello()"><script>
function hello(){
    alert("hello world!");
}
</script>
Copier après la connexion

(2) Les événements de liaison dans le code JavaScript
Les événements de liaison dans le code JavaScript (c'est-à-dire dans les balises de script) peuvent séparer le code JavaScript des balises HTML. et facile à gérer et à développer.

<input type="button" value="click me" id="btn"><script>
document.getElementById("btn").onclick = function(){
    alert("hello world!");
}
</script>
Copier après la connexion

(3) Utilisez l'écoute d'événements pour lier des événements
Une autre façon de lier des événements consiste à utiliser addEventListener() ou attachEvent() pour lier la fonction d'écoute d'événements.
Surveillance des événements
Concernant la surveillance des événements, la spécification W3C définit trois étapes d'événement, qui sont l'étape de capture, l'étape cible et l'étape de bouillonnement.
Spécification W3C

element.addEventListener(event, function, useCapture)
Copier après la connexion

événement : (obligatoire) nom de l'événement, prend en charge tous les événements DOM.
fonction : (obligatoire) Spécifie la fonction à exécuter lorsque l'événement est déclenché.
useCapture : (facultatif) Spécifie si l'événement est exécuté en phase de capture ou de bouillonnement. vrai, capturer. faux, bulle. La valeur par défaut est fausse.

<input type="button" value="click me" id="btn1"><script>
document.getElementById("btn1").addEventListener("click",hello);
function hello(){
    alert("hello world!");
}
</script>
Copier après la connexion

Standard IE

element.attachEvent(event, function)
Copier après la connexion

événement : (obligatoire) type d'événement. Il faut ajouter "on", par exemple : onclick.
fonction : (obligatoire) Spécifie la fonction à exécuter lorsque l'événement est déclenché.

<input type="button" value="click me" id="btn2"><script>
document.getElementById("btn2").attachEvent("onclick",hello);
function hello(){
    alert("hello world!");
}
</script>
Copier après la connexion

Avantages de la surveillance des événements
1. Plusieurs événements peuvent être liés.
La liaison d'événement régulière n'exécute que le dernier événement lié. L'écouteur d'événements peut exécuter plusieurs fonctions.

<input type="button" value="click me" id="btn4"><script>
var btn4 = document.getElementById("btn4");
btn4.addEventListener("click",hello1);
btn4.addEventListener("click",hello2);
function hello1(){
    alert("hello 1");
}
function hello2(){
    alert("hello 2");
}
</script>
Copier après la connexion

2. Vous pouvez dissocier la

<input type="button" value="click me" id="btn5"><script>
var btn5 = document.getElementById("btn5");
btn5.addEventListener("click",hello1);//执行了
btn5.addEventListener("click",hello2);//不执行
btn5.removeEventListener("click",hello2);
function hello1(){
    alert("hello 1");
}
function hello2(){
    alert("hello 2");
}
</script>
Copier après la connexion

Surveillance des événements encapsulés

<input type="button" value="click me" id="btn5">//绑定监听事件
function addEventHandler(target,type,fn){
    if(target.addEventListener){
        target.addEventListener(type,fn);
    }else{
        target.attachEvent("on"+type,fn);
    }
}//移除监听事件
function removeEventHandler(target,type,fn){
    if(target.removeEventListener){
        target.removeEventListener(type,fn);
    }else{
        target.detachEvent("on"+type,fn);
    }
}
Copier après la connexion

Capture d'événement : La capture d'événement fait référence au processus allant du document au nœud qui déclenche l'événement, c'est-à-dire de haut en bas pour déclencher l'événement.
Evénement bouillonnant : déclenche des événements de bas en haut. Le troisième paramètre de la méthode des événements liés est de contrôler si la séquence de déclenchement d'événement est une capture d'événement. vrai, capture d'événement ; faux, événement bouillonnant. La valeur par défaut est false, ce qui signifie que l'événement bouillonne.

<p id="parent">
  <p id="child" class="child"></p>
</p>

document.getElementById("parent").addEventListener("click",function(e){
                alert("parent事件被触发,"+this.id);
            })
            document.getElementById("child").addEventListener("click",function(e){
                alert("child事件被触发,"+this.id)
            })

child事件被触发,child
parent事件被触发,parent
Copier après la connexion

Conclusion : enfant d'abord, puis parent. Les événements sont déclenchés dans l’ordre de l’intérieur vers l’extérieur, ce qu’on appelle le bouillonnement d’événements.
Changez maintenant la valeur du troisième paramètre en vrai :

document.getElementById("parent").addEventListener("click",function(e){
                alert("parent事件被触发,"+e.target.id);
            },true)
            document.getElementById("child").addEventListener("click",function(e){
                alert("child事件被触发,"+e.target.id)
            },true)parent事件被触发,parentchild事件被触发,child
Copier après la connexion

Conclusion : d'abord parent, puis enfant. L'ordre de déclenchement des événements est modifié de l'extérieur vers l'intérieur, ce qui correspond à la capture d'événements.

Empêcher les événements de bouillonner et empêcher les événements par défaut :
Méthode event.stopPropagation() : Il s'agit d'une méthode pour empêcher les événements de bouillonner et empêcher les événements de s'écoulant sur le document, mais l'événement par défaut sera toujours exécuté. Lorsque vous utilisez cette méthode, si vous cliquez sur une connexion, la connexion sera toujours ouverte.
Méthode event.preventDefault() : Il s'agit d'une méthode pour empêcher l'événement par défaut. Lorsque cette méthode est appelée, la connexion ne sera pas ouverte, mais un bouillonnement se produira et le bouillonnement sera transmis. vers la couche supérieure.Élément parent
return false : Cette méthode est plus violente. Elle empêchera le bouillonnement des événements et empêchera les événements par défaut. Lorsque ce code est écrit, la connexion ne sera pas ouverte et l'événement. ne sera pas transmis à l'élément supérieur. L'élément parent d'une couche ; on peut comprendre que return false équivaut à appeler event.stopPropagation() et event.preventDefault() en même temps

2. Délégation d'événement
La délégation d'événement est à utiliser Le principe du bullage est d'ajouter des événements aux éléments parents ou aux éléments ancêtres pour déclencher des effets d'exécution.

<input type="button" value="click me" id="btn6">
var btn6 = document.getElementById("btn6");
document.onclick = function(event){    
event = event || window.event;    
var target = event.target || event.srcElement;    
if(target == btn6){
        alert(btn5.value);
    }
}
Copier après la connexion

Avantages de la délégation d'événements
1. Améliorez les performances JavaScript. La délégation d'événements peut améliorer considérablement la vitesse de traitement des événements et réduire l'utilisation de la mémoire

<ul id="list">
  <li id="item1" >item1</li>
  <li id="item2" >item2</li>
  <li id="item3" >item3</li></ul><script>
  var item1 = document.getElementById("item1");
  var item2 = document.getElementById("item2");
  var item3 = document.getElementById("item3");

document.addEventListener("click",function(event){
    var target = event.target;    
    if(target == item1){
        alert("hello item1");
    }else if(target == item2){
        alert("hello item2");
    }else if(target == item3){
        alert("hello item3");
    }
})</script>
Copier après la connexion

2. Ajoutez des éléments DOM de manière dynamique, sans modifier les liaisons d'événements en raison des changements d'éléments.

<ul id="list">
  <li id="item1" >item1</li>
  <li id="item2" >item2</li>
  <li id="item3" >item3</li></ul><script>var list = document.getElementById("list");

document.addEventListener("click",function(event){
    var target = event.target;    
    if(target.nodeName == "LI"){
        alert(target.innerHTML);
    }
})
var node=document.createElement("li");
var textnode=document.createTextNode("item4");
node.appendChild(textnode);
list.appendChild(node);
</script>
Copier après la connexion

Recommandations associées :

Une brève discussion sur l'événement de liaison on() et l'événement de déliaison off() de jquery

Une brève discussion sur les méthodes courantes de liaison d'événements JavaScript et une analyse de ses avantages et inconvénients

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)

Combien de façons existe-t-il de lier des événements dans jquery ? Combien de façons existe-t-il de lier des événements dans jquery ? Nov 09, 2020 pm 03:30 PM

Il existe 4 façons de lier des événements dans jquery, à savoir : les méthodes bind(), live(), délégué() et on() ; la méthode bind() ne peut lier des événements qu'à des éléments existants, tandis que la méthode live() ), on ; () et délégué() prennent tous en charge la liaison d'événements pour les éléments nouvellement ajoutés à l'avenir.

Résolvez le problème de l'erreur UniApp : l'événement 'xxx' n'est pas lié Résolvez le problème de l'erreur UniApp : l'événement 'xxx' n'est pas lié Nov 25, 2023 am 10:56 AM

Lors du développement d'applications à l'aide d'UniApp, vous pouvez rencontrer le message d'erreur suivant : l'événement 'xxx' n'est pas lié. Cela est dû au mécanisme de liaison d'événements d'UniApp, qui doit être configuré correctement pour résoudre ce problème. 1. Cause du problème Dans UniApp, la liaison des événements des composants de page est effectuée via l'instruction v-on. Par exemple, ajoutez un composant de bouton au modèle : &lt;button@click="onClick"&gt;Click me&lt;/butto

Comment empêcher efficacement les événements de bouillonner Comment empêcher efficacement les événements de bouillonner Feb 19, 2024 pm 08:25 PM

Comment empêcher efficacement le bouillonnement d'événements nécessite des exemples de code spécifiques.Le bouillonnement d'événements signifie que lorsqu'un événement sur un élément est déclenché, l'élément parent recevra également le même déclencheur d'événement. Ce mécanisme de livraison d'événements pose parfois des problèmes au développement Web. Nous devons apprendre à empêcher efficacement les événements de se déclencher. En JavaScript, nous pouvons empêcher un événement de se propager en utilisant la méthode stopPropagation() de l'objet événement. Cette méthode peut être appelée dans un gestionnaire d'événements pour empêcher la propagation de l'événement vers l'élément parent.

Implémenter la fonction de surveillance des événements cartographiques à l'aide de JavaScript et Tencent Maps Implémenter la fonction de surveillance des événements cartographiques à l'aide de JavaScript et Tencent Maps Nov 21, 2023 pm 04:10 PM

Désolé, mais je ne peux pas vous fournir un exemple de code complet. Cependant, je peux vous fournir une idée de base et un exemple d'extrait de code pour référence. Voici un exemple simple de combinaison de JavaScript et de Tencent Map pour implémenter la fonction de surveillance des événements de carte : //Présentation de l'API de Tencent Map constscript=document.createElement('script');script.src='https://map.

Comment ajouter des événements aux éléments ? Trois façons d'analyser les événements de liaison JS Comment ajouter des événements aux éléments ? Trois façons d'analyser les événements de liaison JS Aug 04, 2022 pm 07:27 PM

En tant que langage de script, JavaScript peut lier des événements aux éléments de la page, de sorte que lorsqu'un événement spécifié se produit, le gestionnaire d'événements correspondant puisse être automatiquement appelé pour gérer l'événement. Alors comment ajouter des événements aux éléments ? L'article suivant vous présentera trois façons de lier des événements dans JS. J'espère qu'il vous sera utile !

Quelle est la fonction de l'événement de liaison jquery Quelle est la fonction de l'événement de liaison jquery Mar 20, 2023 am 10:52 AM

La fonction de l'événement de liaison jquery : lier les événements ordinaires aux nœuds DOM lorsque le nœud DOM est sélectionné, liez-y l'événement pour permettre aux utilisateurs de fournir les opérations correspondantes. jQuery fournit quatre méthodes de liaison d'événements, à savoir bind, live, délégué et on, et les fonctions de désécoute correspondantes sont unbind, die, undelegate et off.

Une discussion approfondie de la technologie de liaison d'événements jQuery Une discussion approfondie de la technologie de liaison d'événements jQuery Feb 26, 2024 pm 07:36 PM

jQuery est une bibliothèque JavaScript populaire largement utilisée pour gérer l'interactivité des pages Web. Parmi eux, la liaison d'événements est l'une des fonctions importantes de jQuery, grâce à la liaison d'événements, des réponses aux interactions des utilisateurs peuvent être obtenues. Cet article explorera la technologie de liaison d'événements jQuery et donnera des exemples de code spécifiques. 1. Le concept de base de la liaison d'événements La liaison d'événements fait référence à l'ajout d'un écouteur d'événements sur un élément DOM pour effectuer des opérations spécifiées lorsqu'un événement spécifique se produit. Dans jQuery, sélectionnez le souhaité

Comment implémenter la surveillance des événements dans les classes internes anonymes Java ? Comment implémenter la surveillance des événements dans les classes internes anonymes Java ? May 02, 2024 pm 12:24 PM

Des classes internes anonymes sont utilisées pour implémenter la surveillance des événements, éliminant ainsi le besoin de créer des fichiers de classe distincts et simplifiant ainsi le processus. La syntaxe est : new{//Implémentez la méthode déclarée dans l'interface}. Par exemple, dans la classe Button, l'ajout d'un écouteur ActionListener peut être réalisé via une classe interne anonyme dont la méthode actionPerformed imprime un message lorsque l'on clique sur le bouton. Il simplifie le code et améliore la lisibilité, mais n'accède qu'aux variables locales et n'a ni constructeurs ni champs.

See all articles