addEventListener()和removeEventListener()追加事件和删除追加事件


Posted in Javascript onDecember 04, 2020

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

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

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

1 var btn = document.getElementById("myBtn");
2 btn.addEventListener("click", function () {
3  alert(this.id);
4 }, 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);

在这个例子中,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()中用来相同的函数。

大多数情况下,都是将事件处理程序添加到事件流的冒泡阶段,这样可以最大限度地兼容各种浏览器。最好只在需要在是时间到达目标之前截获它的时候将事件处理程序添加到捕获阶段。如果不是特别需要,我们不建议在事件捕获阶段注册事件处理程序;

亲测:

方法的内存地址十分的重要,一定要相同才可以删除;试过遇到的坑:

var clickFun = null;
aa = function(){
 clickFun = function(){
  alert("1")
 }
 window.removeEventListener("click",clickFun,false)
 window.addEventListener("click",clickFun,false)
}
setInterval(function(){
 aa()
},2000)

需求,需要不断地往一个function里面塞数据,里面会有追加,如果不删除了话,会一直追加上去,不环保并且耗内存,必须要删掉追加;然而像上面这样写的话,由于removeEventListener和addEventListener里面的clickFun内存不相等,导致删除不成功;调整如下:

var clickFun = null;
aa = function(){
 !clickFun && (window.removeEventListener("click",clickFun,false));
 clickFun = function(){
  alert("1")
 }
 window.addEventListener("click",clickFun,false)
}
setInterval(function(){
 aa()
},2000)

确保删除的是同一个内存的方法

到此这篇关于addEventListener()和removeEventListener()追加事件和删除追加事件的文章就介绍到这了,更多相关addEventListener()和removeEventListener()追加事件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JS实现浏览器菜单命令
Sep 05 Javascript
用JavaScript调用WebService的示例
Apr 07 Javascript
jquery foreach使用示例
Sep 12 Javascript
jQuery中removeAttr()方法用法实例
Jan 05 Javascript
JavaScript 表单处理实现代码
Apr 13 Javascript
JavaScript中的bold()方法使用详解
Jun 08 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
JavaScript 异步调用
Oct 25 Javascript
JS实现获取进今年第几天是周几的方法分析
Jun 27 Javascript
vue与bootstrap实现简单用户信息添加删除功能
Feb 15 Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
Nov 26 Javascript
vue使用echarts图表自适应的几种解决方案
Dec 04 #Vue.js
原生JS实现拖拽效果
Dec 04 #Javascript
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 #Vue.js
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 #Vue.js
JS如何监听div的resize事件详解
Dec 03 #Javascript
JavaScript十大取整方法实例教程
Dec 03 #Javascript
js实现圆形菜单选择器
Dec 03 #Javascript
You might like
附件名前加网站名
2008/03/23 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
2011/07/03 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
Linux如何压缩可执行文件
2014/03/27 面试题
教师个人的自我评价分享
2014/01/02 职场文书
银行领导证婚词
2014/01/11 职场文书
房屋继承公证书
2014/04/10 职场文书
党员志愿者活动总结
2014/06/26 职场文书
分居协议书范本
2014/11/03 职场文书
高中班主任评语
2014/12/30 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA