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 相关文章推荐
JQuery扩展插件Validate 3通过参数设置错误信息
Sep 05 Javascript
JS 获取select(多选下拉)中所选值的示例代码
Aug 02 Javascript
input输入框鼠标焦点提示信息
Mar 17 Javascript
js实现仿京东2级菜单效果(带延时功能)
Aug 27 Javascript
详解JavaScript对象和数组
Dec 03 Javascript
你不知道的 javascript【推荐】
Jan 08 Javascript
canvas实现简易的圆环进度条效果
Feb 28 Javascript
js图片延迟加载(Lazyload)三种实现方式
Mar 01 Javascript
微信小程序页面滑动屏幕加载数据效果
Nov 16 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 jQuery
JS页面动态绘图工具SVG,Canvas,VML介简介
Oct 16 Javascript
夯基础之手撕javascript继承详解
Nov 09 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
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
asm.js使用示例代码
2013/11/28 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
了解javascript中的Dom操作
2019/05/27 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
初步解析Python下的多进程编程
2015/04/28 Python
PyCharm配置mongo插件的方法
2018/11/30 Python
解决yum对python依赖版本问题
2019/07/05 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
Python简易版图书管理系统
2019/08/12 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
酒店服务实习自我鉴定
2013/09/22 职场文书
计算机网络专业个人的自我评价
2013/10/17 职场文书
物流专业求职计划书
2014/01/10 职场文书
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
餐饮投资计划书
2014/04/25 职场文书
工程售后服务方案
2014/06/08 职场文书
珍惜资源的建议书
2014/08/26 职场文书
法人委托书的范本格式
2014/09/11 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
大学毕业生个人总结
2015/02/28 职场文书
诉讼和解协议书
2016/03/23 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
Python中requests库的用法详解
2022/06/05 Python