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 相关文章推荐
IE6不能修改NAME问题的解决方法
Sep 03 Javascript
JQuery伸缩导航练习示例
Nov 13 Javascript
Javascript基础知识(一)核心基础语法与事件模型
Sep 29 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
Jan 07 Javascript
原生js实现网易轮播图效果
Apr 10 Javascript
Vue获取DOM元素样式和样式更改示例
Mar 07 Javascript
微信小程序之网络请求简单封装实例详解
Jun 28 Javascript
详解关于react-redux中的connect用法介绍及原理解析
Sep 11 Javascript
AngularJS中下拉框的基本用法示例
Oct 11 Javascript
使用Vue CLI创建typescript项目的方法
Aug 09 Javascript
JS实现按比例缩小图片宽高
Aug 24 Javascript
原生JS实现分页
Apr 19 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
PHPLog php 程序调试追踪工具
2009/09/09 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
Python基于有道实现英汉字典功能
2015/07/25 Python
python @property的用法及含义全面解析
2018/02/01 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
工商治理实习生的自我评价
2014/01/15 职场文书
质量承诺书怎么写
2014/05/24 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
整改通知书格式
2015/04/22 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
MySQL锁机制
2021/04/05 MySQL
React中的Context应用场景分析
2021/06/11 Javascript
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS