Maison > interface Web > js tutoriel > le corps du texte

js gestionnaires d'événements souvent rencontrés dans l'apprentissage JavaScript

php是最好的语言
Libérer: 2018-07-26 12:43:45
original
1562 Les gens l'ont consulté

Il existe trois manières principales de spécifier des gestionnaires d'événements pour les événements. 1. Gestionnaire d'événements HTML : Tout d'abord, cette méthode est obsolète ; 2. Gestionnaire d'événements DOM niveau 0 : Cette méthode est simple et multi-navigateur, mais elle ne peut en ajouter qu'un à un élément. . Fonction de gestion des événements ; 3. Gestionnaire d'événements au niveau DOM2 : Le gestionnaire d'événements au niveau DOM2 peut ajouter plusieurs gestionnaires d'événements pour un élément.

1. Gestionnaire d'événements

Comme mentionné précédemment, un événement est une certaine action effectuée par l'utilisateur ou le navigateur lui-même, tels que clic, chargement et survol de la souris sont tous des noms d'événements. La fonction qui répond à un événement est appelée gestionnaire d'événements (également appelé gestionnaire d'événements, gestionnaire d'événements). Le nom du gestionnaire d'événements commence par "on", donc le gestionnaire d'événements pour l'événement click est onclick et le gestionnaire d'événements pour l'événement load est onload.

Il existe trois manières principales de spécifier des gestionnaires d'événements pour les événements.

1. Gestionnaire d'événements HTML

Tout d'abord, cette méthode est obsolète. Parce que l’action (code javascript) et le contenu (code html) sont étroitement liés. Mais il peut toujours être utilisé lors de l’écriture d’une petite démo.

Il y a deux méthodes dans cette méthode, toutes deux simples :

La première : définir directement le gestionnaire d'événements et les actions incluses en HTML.

Le code est le suivant :

Deuxième : définir les gestionnaires d'événements en html, Les actions effectuées appellent des scripts définis ailleurs.

Le code est le suivant :

<script>function showMessage(){ alert("cliqué ! "); }</script>

remarque :

1) L'événement lui-même est directement accessible via la variable d'événement, telle car onclick="alert(event .type)" fera apparaître un événement de clic.

2) Cette valeur est égale à l'élément cible de l'événement, où l'élément cible est saisi. Par exemple, onclick="alert(this.value)" peut obtenir la valeur de l'élément d'entrée.

2. Gestionnaire d'événements DOM niveau 0

Cette méthode est simple et multi-navigateurs, mais elle ne peut ajouter qu'un seul gestionnaire d'événements à un élément.

Étant donné que cette méthode ajoute plusieurs gestionnaires d'événements aux éléments, les derniers écraseront les précédents.

Ajouter un gestionnaire d'événements :

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

Supprimer un gestionnaire d'événements :

Le code est le suivant :

myBtn.onclick=null;

3. Gestionnaire d'événements au niveau DOM2

Le gestionnaire d'événements au niveau DOM2 peut ajouter plusieurs gestionnaires d'événements à un élément. programme. Il définit deux méthodes pour ajouter et supprimer des gestionnaires d'événements : addEventListener() et removeEventListener().

Les deux méthodes nécessitent 3 paramètres : le nom de l'événement, la fonction de gestion de l'événement et la valeur booléenne.

Cette valeur booléenne est vraie, l'événement est traité en phase de capture, faux, et l'événement est traité en phase de bouillonnement, la valeur par défaut est fausse.

Ajouter des gestionnaires d'événements : Ajoutez maintenant deux gestionnaires d'événements pour le bouton, un pour afficher "bonjour" et un pour afficher "monde".

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

Supprimer les gestionnaires d'événements : Les gestionnaires d'événements ajoutés via addEventListener doivent être supprimés via RemoveEventListener et les paramètres doivent être cohérents.

remarque : les fonctions anonymes ajoutées via addEventListener ne peuvent pas être supprimées. Le code ci-dessous ne fonctionnera pas !

Le code est le suivant :

myBtn.removeEventListener("click",function(){ alert("world"); },false) ;

Il semble que le paramètre removeEventListener soit cohérent avec le paramètre addEventListener ci-dessus, mais en fait la fonction anonyme dans le deuxième paramètre est complètement différente.

Donc, pour supprimer le gestionnaire d'événements, le code peut être écrit comme ceci :

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

Gestionnaire d'événements IE

1. Les scénarios d'application réels

Les navigateurs IE8 et inférieurs ne prennent pas en charge addEventListener. En développement réel, si vous souhaitez être compatible avec les navigateurs IE8 et inférieurs. Si vous utilisez des événements de liaison natifs et devez effectuer un traitement de compatibilité, vous pouvez utiliser la liaison de jquery à la place.

2. Liaison d'événement IE8

Les navigateurs IE8 et inférieurs implémentent deux méthodes similaires à celles du DOM : attachEvent() et detachEvent().

Les deux méthodes nécessitent deux paramètres : le nom du gestionnaire d'événements et la fonction du gestionnaire d'événements.

remarque :

IE11 ne prend en charge que addEventListener !

IE9 et IE10 prennent tous deux en charge attachEvent et addEventListener !

Les versions TE8 et inférieures ne prennent en charge que attachEvent !

Vous pouvez utiliser le code suivant pour tester dans différentes versions des navigateurs IE.

<input id="myBtn" type="button" value="click me!"/>
<script>
 var myBtn=document.getElementById("myBtn");
 var handlerIE=function(){
  alert("helloIE");
 }
 var handlerDOM= function () {
  alert("helloDOM");
 }
 myBtn.addEventListener("click",handlerDOM,false);
 myBtn.attachEvent("onclick",handlerIE);
</script>
Copier après la connexion

添加事件处理程序:现在为按钮添加两个事件处理函数,一个弹出“hello”,一个弹出“world

<script>
 var myBtn=document.getElementById("myBtn");
 myBtn.attachEvent("onclick",function(){
  alert("hello");
 });
 myBtn.attachEvent("onclick",function(){
  alert("world");
 });
</script>
Copier après la connexion

note:这里运行效果值得注意一下:

IE8以下浏览器中先弹出“world”,再弹出“hello”。和DOM中事件触发顺序相反。

IE9及以上浏览器先弹出“hello”,再弹出“world”。和DOM中事件触发顺序相同了。

可见IE浏览器慢慢也走上正轨了。。。

删除事件处理程序:通过attachEvent添加的事件处理程序必须通过detachEvent方法删除,且参数一致。

和DOM事件一样,添加的匿名函数将无法删除。

所以为了能删除事件处理程序,代码可以这样写:

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

note:IE事件处理程序中还有一个地方需要注意:作用域。

使用attachEvent()方法,事件处理程序会在全局作用域中运行,因此this等于window。

而dom2或dom0级的方法作用域都是在元素内部,this值为目标元素。

下面例子会弹出true。

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

在编写跨浏览器的代码时,需牢记这点。

IE7\8检测:

//判断IE7\8 兼容性检测
   var isIE=!!window.ActiveXObject;
   var isIE6=isIE&&!window.XMLHttpRequest;
   var isIE8=isIE&&!!document.documentMode;
   var isIE7=isIE&&!isIE6&&!isIE8;
   if(isIE8 || isIE7){
    li.attachEvent("onclick",function(){
     _marker.openInfoWindow(_iw);
    }) 
   }else{
    li.addEventListener("click",function(){
     _marker.openInfoWindow(_iw);
    })
   }
Copier après la connexion

以上所述是小编给大家介绍的JavaScript事件学习小结(二)js事件处理程序的相关知识,希望对大家有所帮助!

相关推荐:

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