Maison > interface Web > js tutoriel > Explication détaillée du flux d'événements et des gestionnaires d'événements en JavaScript (tutoriel graphique)

Explication détaillée du flux d'événements et des gestionnaires d'événements en JavaScript (tutoriel graphique)

亚连
Libérer: 2018-05-21 13:47:26
original
1616 Les gens l'ont consulté

Le flux d'événements fait référence à l'ordre dans lequel les événements sont reçus de la page, tandis que le gestionnaire d'événements gère la réponse à l'événement. Ensuite, nous expliquerons en détail le flux d'événements et le gestionnaire d'événements en JavaScript

<.>Flux d'événements : il existe deux types. Les IE sont un flux bouillonnant d'événements. L'événement est reçu de l'élément le plus spécifique au début et propagé vers des nœuds moins spécifiques (Élément -> Document). Le contraire est le flux de capture d'événements de Netscape.

Les événements de niveau DOM2 stipulent que le flux d'événements comprend trois étapes : l'étape de capture d'événement, l'étape cible et l'étape de bouillonnement d'événement.

Dans la plupart des cas, les gestionnaires d'événements sont ajoutés à la phase bouillonnante du flux d'événements. Un exemple d'EventUtil :

var EventUtil = {
  addHandler: function(element, type, handler){
    if(element.addEventListener){
      element.addEventListener(type, handler, false);
    }else if(element.attachEvent){
      element.attachEvent(&#39;on&#39; + type, handler); // IE8
    }else{
      element[&#39;on&#39; + type] = handler;
    }
  },
  removeHandler: function(){...}
}
Copier après la connexion
Regardons-le en détail :

Gestionnaire d'événements de niveau DOM0La manière traditionnelle de spécifier un gestionnaire d'événements via Javascript est de Fonction affecté à une propriété de gestionnaire d’événements. Chaque élément possède ses propres attributs de gestionnaire d'événements, qui sont généralement tous en minuscules, comme onclick. En définissant la valeur de cette propriété sur une fonction, vous pouvez spécifier un gestionnaire d'événements.

var btn = document.getElementById(&#39;myBtn&#39;);
// 添加事件处理程序
btn.onclick = function () {
  alert( this );//为DOM元素btn
};
// 移除事件处理程序
btn.onclick = null;
Copier après la connexion
Avantages : 1. Simple 2. Présente des avantages multi-navigateurs

Inconvénients : les gestionnaires d'événements ne sont pas spécifiés avant l'exécution du code, ces codes sont donc derrière les boutons de la page, là Il se peut qu'il n'y ait aucune réponse, quelle que soit la façon dont vous cliquez pendant un certain temps, et l'expérience utilisateur se détériorera.

Le gestionnaire d'événements au niveau DOM2 définit deux méthodes pour gérer les opérations de spécification et de suppression des gestionnaires d'événements : addEventListener() et removeEventListener(). Trois paramètres, 1. Le nom de l'événement à traiter. 2. Une fonction de gestionnaire d'événements. 3. Une valeur booléenne. La dernière valeur booléenne est true, ce qui signifie que le gestionnaire d'événements est appelé pendant la phase de capture, et false, ce qui signifie que le gestionnaire d'événements est appelé pendant la phase de bouillonnement.

// 添加多个事件处理程序
var btn = document.getElementById(&#39;myBtn&#39;);
btn.addEventListener(&#39;click&#39;,function (){
  alert( this );// 为DOM元素btn
},false );
btn.addEventListener(&#39;click&#39;,function () {
  alert(&#39;Hello World&#39;);
},false);

// 移除事件处理程序
btn.removeEventListener(&#39;click&#39;,function () {
  // 匿名函数无法被移除,移除失败
},false);
  // 改写
  var handler = function () {
  alert(this.id);
  };
  btn.addEventListener(&#39;click&#39;,handler,false);
  // 再次移除事件处理程序
  btn.removeEventListener(&#39;click&#39;,handler,false);// 移除成功
Copier après la connexion
Ces deux gestionnaires d'événements se déclencheront dans l'ordre dans lequel ils sont ajoutés. Dans la plupart des cas, des gestionnaires d'événements sont ajoutés à la phase de bouillonnement du flux d'événements, afin de maximiser la compatibilité avec les différentes versions de navigateurs.

Avantages : plusieurs gestionnaires d'événements peuvent être ajoutés à un seul élément.

Inconvénients : les navigateurs IE8 et inférieurs ne prennent pas en charge les gestionnaires d'événements de niveau DOM2. (Y compris IE8)

Le gestionnaire d'événements IE définit deux méthodes, similaires à celles ci-dessus : attachEvent(), detachEvent(). Les deux méthodes reçoivent les deux mêmes paramètres : le nom du gestionnaire d'événements et la fonction du gestionnaire d'événements. Étant donné qu'IE8 et les navigateurs antérieurs ne prennent en charge que le bouillonnement d'événements, les gestionnaires d'événements ajoutés via detachEvent() seront ajoutés à la phase de bouillonnement.

var btn = document.getElementById(&#39;myBtn&#39;);
btn.attachEvent(&#39;onclick&#39;, function(){
  alert( this );// window
});
btn.attachEvent(&#39;onclick&#39;, funciton(){
  alert("HELLO, WORLD");
});
Copier après la connexion
Lorsque vous cliquez sur le bouton, l'ordre de déclenchement de ces deux gestionnaires d'événements est exactement l'opposé de celui ci-dessus. Au lieu de déclencher les gestionnaires d’événements dans l’ordre dans lequel ils ont été ajoutés, c’est bien le contraire.

Avantages : plusieurs gestionnaires d'événements peuvent être ajoutés à un seul élément.

Inconvénients : ne prend en charge qu'IE.

Gestionnaire d'événements multi-navigateurs

par exemple :

var EventUtil = {
  addHandler : function ( ele, type, handler ) {
    if ( ele.addEventListener ) {
      ele.addEventListener( type, handler, false );
    } else if ( ele.attachEvent ) {
      ele.attachEvent( &#39;on&#39; + type, handler );
    } else {
      ele[&#39;on&#39; + type] = handler
    }
  },
  removeHandler: function ( ele, type, handler ) {
    if ( ele.removeEventListener ) {
      ele.removeEventListener( type, handler, false );
    } else if ( ele.detachEvent ) {
      ele.detachEvent( &#39;on&#39; + type, handler );
    } else {
      ele[ &#39;on&#39; + type ] = null;
    }
  }
}
Copier après la connexion
Ce qui précède est ce que j'ai compilé pour vous, j'espère qu'il vous sera utile. vous à l'avenir.

Articles associés :

Conseils JavaScript de base (tutoriels image et texte, réponses détaillées pour vous)

Parcours des valeurs dans la collection EL expression List en javascript

Analyse détaillée et analyse du principe de fonctionnement JavaScript

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal