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 相关文章推荐
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
Nov 08 Javascript
json原理分析及实例介绍
Nov 29 Javascript
asp.net中System.Timers.Timer的使用方法
Mar 20 Javascript
js创建子窗口并且回传值示例代码
Jul 02 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
js判断变量初始化的三种形式及推荐用的形式
Jul 22 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
Dec 22 Javascript
JQuery之proxy实现绑定代理方法
Aug 01 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
Nov 27 Javascript
Vue SPA单页应用首屏优化实践
Jun 28 Javascript
Element-ui tree组件自定义节点使用方法代码详解
Sep 17 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
Mar 07 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
网络资源
2006/10/09 PHP
php实现cookie加密的方法
2015/03/10 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
老生常谈javascript中逻辑运算符&&和||的返回值问题
2017/04/13 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
pandas对指定列进行填充的方法
2018/04/11 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
Django框架 信号调度原理解析
2019/09/04 Python
Python过滤序列元素的方法
2020/07/31 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
医科学校毕业生自荐信
2013/11/09 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
世界红十字日活动总结
2015/02/10 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
企业党建工作总结2015
2015/05/26 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python