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 写类方式之九
Jul 05 Javascript
Ubuntu 11.10 安装Node.js的方法
Nov 30 Javascript
提取jquery的ready()方法单独使用示例
Mar 25 Javascript
原生JavaScript实现合并多个数组示例
Sep 21 Javascript
js中实现字符串和数组的相互转化详解
Jan 24 Javascript
js下将金额数字每三位一逗号分隔
Feb 19 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
Sep 04 Javascript
JS实现隔行换色的表格排序
Mar 27 Javascript
最通俗易懂的javascript变量提升详解
Aug 05 Javascript
在Mac下彻底卸载node和npm的方法
May 16 Javascript
JavaScript页面倒计时功能完整示例
May 15 Javascript
详解将微信小程序接口Promise化并使用async函数
Aug 05 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
是否存在第一台收音机的说法
2021/03/01 无线电
PHP 远程关机实现代码
2009/11/10 PHP
php 模拟POST|GET操作实现代码
2010/07/20 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
js电信网通双线自动选择技巧
2008/11/18 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
Python中random模块生成随机数详解
2016/03/10 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
python实现名片管理系统项目
2019/04/26 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
内勤岗位职责
2015/02/10 职场文书
教师远程培训心得体会
2016/01/09 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL