Chinaunix首页 | 论坛 | 博客
  • 博客访问: 485979
  • 博文数量: 226
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2111
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-20 09:02
个人简介

web web web

文章分类

全部博文(226)

文章存档

2020年(2)

2019年(1)

2018年(3)

2017年(26)

2016年(57)

2015年(60)

2014年(77)

我的朋友

分类: Web开发

2014-12-05 13:51:22

js事件的监听器的使用


1、当同一个对象使用.onclick的写法触发多个方法的时候,后一个方法会把前一个方法覆盖掉,也就是说,在对象的onclick事件发生时,只会执行最后绑定的方法。而用事件监听则不会有覆盖的现象,每个绑定的事件都会被执行。如下:

[javascript]
  1. "font-size: 18px;">
  2. window.onload = function(){ 
  3.     var btn = document.getElementById("yuanEvent");  
  4.  
  5.     btn.onclick = function(){ 
  6.         alert("第一个事件"); 
  7.     } 
  8.     btn.onclick = function(){ 
  9.         alert("第二个事件"); 
  10.     } 
  11.     btn.onclick = function(){ 
  12.         alert("第三个事件"); 
  13.     } 
  14. } 


最后只输出:第三个事件,因为后一个方法都把前一个方法覆盖掉了。

原生态的事件绑定函数addEventListener:
[javascript]
  1. var eventOne = function(){ 
  2.     alert("第一个监听事件"); 
  3. function eventTwo(){ 
  4.     alert("第二个监听事件"); 
  5. window.onload = function(){ 
  6.     var btn = document.getElementById("yuanEvent"); 
  7.     //addEventListener:绑定函数 
  8.     btn.addEventListener("click",eventOne); 
  9.     btn.addEventListener("click",eventTwo); 


输出:第一个监听事件 和 第二个监听事件

2、采用事件监听给对象绑定方法后,可以解除相应的绑定,写法如下:
[javascript]
  1. var eventOne = function(){ 
  2.     alert("第一个监听事件"); 
  3. function eventTwo(){ 
  4.     alert("第二个监听事件"); 
  5. window.onload = function(){ 
  6.     var btn = document.getElementById("yuanEvent"); 
  7.     btn.addEventListener("click",eventOne); 
  8.     btn.addEventListener("click",eventTwo); 
  9.     btn.removeEventListener("click",eventOne); 


输出:第二个监听事件

3、解除绑定事件的时候一定要用函数的句柄,把整个函数写上是无法解除绑定的。
错误写法:
[javascript]
  1. btn.addEventListener("click",function(){ 
  2.     alert(11); 
  3. }); 
  4. btn.removeEventListener("click",function(){ 
  5.     alert(11); 
  6. }); 


正确写法:
[javascript]
  1. btn.addEventListener("click",eventTwo); 
  2. btn.removeEventListener("click",eventOne); 


总结:对函数进行封装后的监听事件如下,兼容各大主流浏览器。

[javascript]
  1. /*
  2. * addEventListener:监听Dom元素的事件
  3. *  target:监听对象
  4. *  type:监听函数类型,如click,mouseover
  5. *  func:监听函数
  6. */ 
  7. function addEventHandler(target,type,func){ 
  8.     if(target.addEventListener){ 
  9.         //监听IE9,谷歌和火狐 
  10.         target.addEventListener(type, func, false); 
  11.     }else if(target.attachEvent){ 
  12.         target.attachEvent("on" + type, func); 
  13.     }else
  14.         target["on" + type] = func; 
  15.     }  
  16. /*
  17. * removeEventHandler:移除Dom元素的事件
  18. *  target:监听对象
  19. *  type:监听函数类型,如click,mouseover
  20. *  func:监听函数
  21. */ 
  22. function removeEventHandler(target, type, func) { 
  23.     if (target.removeEventListener){ 
  24.         //监听IE9,谷歌和火狐 
  25.         target.removeEventListener(type, func, false); 
  26.     } else if (target.detachEvent){ 
  27.         target.detachEvent("on" + type, func); 
  28.     }else
  29.         delete target["on" + type]; 
  30.     } 
  31. var eventOne = function(){ 
  32.     alert("第一个监听事件"); 
  33. function eventTwo(){ 
  34.     alert("第二个监听事件"); 
  35. window.onload = function(){ 
  36.     var bindEventBtn = document.getElementById("bindEvent"); 
  37.     //监听eventOne事件 
  38.     addEventHandler(bindEventBtn,"click",eventOne); 
  39.     //监听eventTwo事件 
  40.     addEventHandler(bindEventBtn,"click",eventTwo ); 
  41.     //监听本身的事件 
  42.     addEventHandler(bindEventBtn,"click",function(){ 
  43.         alert("第三个监听事件"); 
  44.     }); 
  45.     //取消第一个监听事件 
  46.     removeEventHandler(bindEventBtn,"click",eventOne); 
  47.     //取消第二个监听事件 
  48.     removeEventHandler(bindEventBtn,"click",eventTwo); 


[javascript]
  1.  实例:[html]
  1. > 
  2. <html> 
  3.     <head> 
  4.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  5.         <title>Eventtitle> 
  6.         <script type="text/javascript"> 
  7.             function addEventHandler(target,type,func){ 
  8.                 if(target.addEventListener){ 
  9.                     //监听IE9,谷歌和火狐 
  10.                     target.addEventListener(type, func, false); 
  11.                 }else if(target.attachEvent){ 
  12.                     target.attachEvent("on" + type, func); 
  13.                 }else{ 
  14.                     target["on" + type] = func; 
  15.                 }  
  16.             } 
  17.             function removeEventHandler(target, type, func) { 
  18.                 if (target.removeEventListener){ 
  19.                     //监听IE9,谷歌和火狐 
  20.                     target.removeEventListener(type, func, false); 
  21.                 } else if (target.detachEvent){ 
  22.                     target.detachEvent("on" + type, func); 
  23.                 }else { 
  24.                     delete target["on" + type]; 
  25.                 } 
  26.             } 
  27.             var eventOne = function(){ 
  28.                 alert("第一个监听事件"); 
  29.             } 
  30.             function eventTwo(){ 
  31.                 alert("第二个监听事件"); 
  32.             } 
  33.             window.onload = function(){ 
  34.                 var bindEventBtn = document.getElementById("bindEvent"); 
  35.                 //监听eventOne事件 
  36.                 addEventHandler(bindEventBtn,"click",eventOne); 
  37.                 //监听eventTwo事件 
  38.                 addEventHandler(bindEventBtn,"click",eventTwo ); 
  39.                 //监听本身的事件 
  40.                 addEventHandler(bindEventBtn,"click",function(){ 
  41.                     alert("第三个监听事件"); 
  42.                 }); 
  43.                 //取消第一个监听事件 
  44.                 removeEventHandler(bindEventBtn,"click",eventOne); 
  45.                 //取消第二个监听事件 
  46.                 removeEventHandler(bindEventBtn,"click",eventTwo); 
  47.             } 
  48.         script> 
  49.  
  50.  
  51.     head> 
  52.     <body> 
  53.         <input type="button" value="测试" id="bindEvent"> 
  54.         <input type="button" value="测试2" id="yuanEvent"> 
  55.     body> 
  56. html> 
阅读(459) | 评论(0) | 转发(0) |
0

上一篇:jQuery可编辑表格

下一篇:阻止事件冒泡

给主人留下些什么吧!~~