addEventListener()与removeEventListener()解析


Posted in Javascript onApril 20, 2017

addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作。
所有的DOM节点中都包含这两种方法,并且它们都接受3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。

最后这个布尔值参数是true,表示在捕获阶段调用事件处理程序;
如果是false(false- 默认),表示在冒泡阶段调用事件处理程序。

addEventListener的参数一共有三个,语法为:
element.addEventListener(type,listener,useCapture)

下面是详解:
1、其中element是要绑定函数的对象。
2、type是事件名称,要注意的是"onclick"要改为"click","onblur"要改为"blur",也就是说事件名不要带"on"。
3、listener当然就是绑定的函数了,记住不要跟括号
4、最后一个参数是个布尔值,表示该事件的响应顺序,下面重点介绍一下addEventListener的第3个参数(useCapture)。

要在按钮上为click事件添加事件处理程序,可以使用下列代码:

var btn = document.getElementById("myBtn");
btn.addEventListener("click", function () {
  alert(this.id);
}, false);

使用DOM2级方法添加事件处理程序的主要好处是可以添加多个事件处理程序。来看下面的例子:

var btn = document.getElementById("myBtn");

btn.addEventListener("click", function () {
  alert(this.id);
}, false);  
btn.addEventListener("click", function () {
  alert("Hello World");
}, false);

通过addEventListener()添加的事件处理程序只能使用removeEventListener()来移除;

移除时传入的参数与添加处理程序时使用的参数相同。
这也意味着通过addEventListener()添加的匿名函数无法移除,如下面的例子所示:

var btn = document.getElementById("myBtn");

btn.addEventListener("click", function () {
   alert(this.id);
}, false);
btn.removeEventListener("click", function () { //无效!
   alert(this.id);
}, false);

在这个例子中,我使用addEventListener()添加一个事件处理程序。
虽然调用removeEventListener看似使用了相同的参数
但实际上,第二个参数与传入addEventListener()中的是完全不同的函数。
而传入removeEventListener()中的事件处理程序函数必须与传入addEventListener()中的相同,

下面的例子所示:

var btn = document.getElementById("myBtn");
var handler = function () {
   alert(this.id);
};
btn.addEventListener("click", handler, false);
btn.removeEventListener("click", handler, false); //有效!

重写后的这个例子没有问题,是因为在addEventListener()和removeEventListener()中用来相同的函数。
实验结果是,用户点击button时,每次都会输出"I have been clicked!",说明removeEventListener()函数没有起到作用。 

通过查找资料,得出结论。在使用removeEventListener()函数时,handler函数,必须和使用addEventListener()里面的handler函数必须相同。

所以上面写的代码是错误的。修正之后的代码应该如下:

//addEventListener()和removeEventListener()中handler函数必须相同,移除事件函数才有效。
function myhandler(){
  console.log("I have been clicked!");
  document.getElementById('info').removeEventListener('click',myhandler,false);
}
var target=document.getElementById('info');
target.addEventListener("click", myhandler, false);
target.removeEventListener("click", myhandler, false); //有效!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
在Javascript中定义对象类别
Dec 22 Javascript
JavaScript 对象链式操作测试代码
Apr 25 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
Feb 06 Javascript
ES6中Symbol类型用法实例详解
Apr 06 Javascript
简单谈谈关于Angular Cli打包的事
Sep 05 Javascript
js实现数组和对象的深浅拷贝
Sep 30 Javascript
JavaScript控制浏览器全屏显示简单示例
Jul 05 Javascript
vue.js 添加 fastclick的支持方法
Aug 28 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
Dec 29 jQuery
scrapyd schedule.json setting 传入多个值问题
Aug 07 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
JavaScript 防抖和节流遇见的奇怪问题及解决
Nov 20 Javascript
详解用vue-cli来搭建vue项目和webpack
Apr 20 #Javascript
js禁止浏览器的回退事件
Apr 20 #Javascript
vue-cli入门之项目结构分析
Apr 20 #Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
Apr 20 #Javascript
详解Vue使用 vue-cli 搭建项目
Apr 20 #Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 #Javascript
Vue.js实现模拟微信朋友圈开发demo
Apr 20 #Javascript
You might like
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
实现vuex原理的示例
2020/10/21 Javascript
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
python 操作excel表格的方法
2020/12/05 Python
python 基于opencv实现图像增强
2020/12/23 Python
利用python绘制正态分布曲线
2021/01/04 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
新员工入职感言
2014/02/01 职场文书
创建青年文明号材料
2014/05/09 职场文书
考试作弊检讨书
2015/01/27 职场文书
环卫工作个人总结
2015/03/04 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android