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 相关文章推荐
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
May 21 Javascript
浅谈javascript中字符串String与数组Array
Dec 31 Javascript
jQuery中parent()方法用法实例
Jan 07 Javascript
跟我学习JScript的Bug与内存管理
Nov 18 Javascript
JS设置时间无效问题的解决办法
Feb 18 Javascript
spring+angular实现导出excel的实现代码
Feb 27 Javascript
泛谈JS逻辑判断选择器 || &&
May 24 Javascript
微信小程序简单的canvas裁剪图片功能详解
Jul 12 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
Sep 18 Javascript
vue与django集成打包的实现方法
Nov 11 Javascript
一篇文章带你浅入webpack的DLL优化打包
Feb 20 Javascript
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 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
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
2018/09/21 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
Python中的元类编程入门指引
2015/04/15 Python
Python的Django框架中的表单处理示例
2015/07/17 Python
Mac 上切换Python多版本
2017/06/17 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
详解Python3中的迭代器和生成器及其区别
2018/10/09 Python
对python Tkinter Text的用法详解
2018/10/11 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
python-视频分帧&多帧合成视频实例
2019/12/10 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
葡萄牙语专业个人求职信
2013/12/10 职场文书
毕业生找工作的求职信范文
2013/12/24 职场文书
廉政教育心得体会
2014/01/01 职场文书
党风廉设责任书
2014/04/16 职场文书
电力安全学习心得体会
2016/01/18 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书