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 相关文章推荐
js切换div css注意的细节
Dec 10 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
May 08 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 Javascript
javascript基于DOM实现权限选择实例分析
May 14 Javascript
jQuery中事件与动画的总结分享
May 24 Javascript
xtemplate node.js 的使用方法实例解析
Aug 22 Javascript
最全的JavaScript开发工具列表 总有一款适合你
Jun 29 Javascript
Vue.js进阶知识点总结
Apr 01 Javascript
使用 node.js 模仿 Apache 小部分功能
Jul 07 Javascript
jquery实现烟花效果(面向对象)
Mar 10 jQuery
JS跨浏览器解析XML应用过程详解
Oct 16 Javascript
微信小程序实现登录注册功能
Dec 29 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+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
浅谈javascript 函数属性和方法
2015/01/21 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
通过C++学习Python
2015/01/20 Python
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
python单元测试unittest实例详解
2015/05/11 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
英文自荐信
2013/12/19 职场文书
房地产开盘策划方案
2014/02/10 职场文书
森林防火工作方案
2014/02/14 职场文书
孩子教育的心得体会
2014/09/01 职场文书
毕业生实习证明
2014/09/19 职场文书
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫