js事件监听器用法实例详解


Posted in Javascript onJune 01, 2015

本文实例讲述了js事件监听器用法。分享给大家供大家参考。具体分析如下:

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

window.onload = function(){ 
 var btn = document.getElementById("yuanEvent"); 
 btn.onclick = function(){ 
  alert("第一个事件"); 
 } 
 btn.onclick = function(){ 
  alert("第二个事件"); 
 } 
 btn.onclick = function(){ 
  alert("第三个事件"); 
 } 
}

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

原生态的事件绑定函数addEventListener:

var eventOne = function(){ 
 alert("第一个监听事件"); 
} 
function eventTwo(){ 
 alert("第二个监听事件"); 
} 
window.onload = function(){ 
 var btn = document.getElementById("yuanEvent"); 
 //addEventListener:绑定函数 
 btn.addEventListener("click",eventOne); 
 btn.addEventListener("click",eventTwo); 
}

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

2、采用事件监听给对象绑定方法后,可以解除相应的绑定,写法如下:

var eventOne = function(){ 
 alert("第一个监听事件"); 
} 
function eventTwo(){ 
 alert("第二个监听事件"); 
} 
window.onload = function(){ 
 var btn = document.getElementById("yuanEvent"); 
 btn.addEventListener("click",eventOne); 
 btn.addEventListener("click",eventTwo); 
 btn.removeEventListener("click",eventOne); 
}

输出:第二个监听事件

3、解除绑定事件的时候一定要用函数的句柄,把整个函数写上是无法解除绑定的。

错误写法:

btn.addEventListener("click",function(){ 
 alert(11); 
}); 
btn.removeEventListener("click",function(){ 
 alert(11); 
});

正确写法:

btn.addEventListener("click",eventTwo); 
btn.removeEventListener("click",eventOne);

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

/* 
 * addEventListener:监听Dom元素的事件 
 * 
 * target:监听对象 
 * type:监听函数类型,如click,mouseover 
 * func:监听函数 
 */ 
function addEventHandler(target,type,func){ 
 if(target.addEventListener){ 
  //监听IE9,谷歌和火狐 
  target.addEventListener(type, func, false); 
 }else if(target.attachEvent){ 
  target.attachEvent("on" + type, func); 
 }else{ 
  target["on" + type] = func; 
 } 
} 
/* 
 * removeEventHandler:移除Dom元素的事件 
 * 
 * target:监听对象 
 * type:监听函数类型,如click,mouseover 
 * func:监听函数 
 */ 
function removeEventHandler(target, type, func) { 
 if (target.removeEventListener){ 
  //监听IE9,谷歌和火狐 
  target.removeEventListener(type, func, false); 
 } else if (target.detachEvent){ 
  target.detachEvent("on" + type, func); 
 }else { 
  delete target["on" + type]; 
 } 
} 
var eventOne = function(){ 
 alert("第一个监听事件"); 
} 
function eventTwo(){ 
 alert("第二个监听事件"); 
} 
window.onload = function(){ 
 var bindEventBtn = document.getElementById("bindEvent"); 
 //监听eventOne事件 
 addEventHandler(bindEventBtn,"click",eventOne); 
 //监听eventTwo事件 
 addEventHandler(bindEventBtn,"click",eventTwo ); 
 //监听本身的事件 
 addEventHandler(bindEventBtn,"click",function(){ 
  alert("第三个监听事件"); 
 }); 
 //取消第一个监听事件 
 removeEventHandler(bindEventBtn,"click",eventOne); 
 //取消第二个监听事件 
 removeEventHandler(bindEventBtn,"click",eventTwo); 
}

实例:

<!DOCTYPE html> 
<html> 
 <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  <title>Event</title> 
  <script type="text/javascript"> 
   function addEventHandler(target,type,func){ 
    if(target.addEventListener){ 
     //监听IE9,谷歌和火狐 
     target.addEventListener(type, func, false); 
    }else if(target.attachEvent){ 
     target.attachEvent("on" + type, func); 
    }else{ 
     target["on" + type] = func; 
    } 
   } 
   function removeEventHandler(target, type, func) { 
    if (target.removeEventListener){ 
     //监听IE9,谷歌和火狐 
     target.removeEventListener(type, func, false); 
    } else if (target.detachEvent){ 
     target.detachEvent("on" + type, func); 
    }else { 
     delete target["on" + type]; 
    } 
   } 
   var eventOne = function(){ 
    alert("第一个监听事件"); 
   } 
   function eventTwo(){ 
    alert("第二个监听事件"); 
   } 
   window.onload = function(){ 
    var bindEventBtn = document.getElementById("bindEvent"); 
    //监听eventOne事件 
    addEventHandler(bindEventBtn,"click",eventOne); 
    //监听eventTwo事件 
    addEventHandler(bindEventBtn,"click",eventTwo ); 
    //监听本身的事件 
    addEventHandler(bindEventBtn,"click",function(){ 
     alert("第三个监听事件"); 
    }); 
    //取消第一个监听事件 
    removeEventHandler(bindEventBtn,"click",eventOne); 
    //取消第二个监听事件 
    removeEventHandler(bindEventBtn,"click",eventTwo); 
   } 
  </script> 
 </head> 
 <body> 
  <input type="button" value="测试" id="bindEvent"> 
  <input type="button" value="测试2" id="yuanEvent"> 
 </body> 
</html>

PS:这里再为大家提供一个关于JS事件的在线工具,归纳总结了JS常用的事件类型与相关函数功能:

javascript事件与功能说明大全:

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
jquery操作checkbox示例分享
Jul 21 Javascript
JS小游戏之宇宙战机源码详解
Sep 25 Javascript
JavaScript开发人员的10个关键习惯小结
Dec 05 Javascript
基于Jquery easyui 选中特定的tab
Nov 17 Javascript
Web Uploader文件上传插件使用详解
May 10 Javascript
Bootstrap标签页(Tab)插件使用方法
Mar 21 Javascript
Javascript中click与blur事件的顺序详析
Apr 25 Javascript
mongoose中利用populate处理嵌套的方法
May 26 Javascript
JS FormData上传文件的设置方法
Jul 05 Javascript
vue结合Echarts实现点击高亮效果的示例
Mar 17 Javascript
Vue是怎么渲染template内的标签内容的
Jun 05 Javascript
AudioContext 实现音频可视化(web技术分享)
Feb 24 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
Jun 01 #Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
Jun 01 #Javascript
JavaScript使用addEventListener添加事件监听用法实例
Jun 01 #Javascript
JavaScript使用位运算符判断奇数和偶数的方法
Jun 01 #Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
Jun 01 #Javascript
JavaScript实现的简单拖拽效果
Jun 01 #Javascript
一看就懂:jsonp详解
Jun 01 #Javascript
You might like
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
python抓取网页图片示例(python爬虫)
2014/04/27 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
Python while 循环使用的简单实例
2016/06/08 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
python ETL工具 pyetl
2020/06/07 Python
python实现斗地主分牌洗牌
2020/06/22 Python
函授本科自我鉴定
2013/11/03 职场文书
医院门卫岗位职责
2013/12/30 职场文书
体育教师教学随笔
2015/08/15 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang