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 相关文章推荐
Javascript学习笔记2 函数
Jan 11 Javascript
JavaScript DOM学习第四章 getElementByTagNames
Feb 19 Javascript
js简单实现点击左右运动的方法
Apr 10 Javascript
JS中创建函数的三种方式及区别
Mar 13 Javascript
Bootstrap下拉菜单样式
Feb 07 Javascript
JavaScript面向对象精要(下部)
Sep 12 Javascript
webstorm添加*.vue文件支持
May 08 Javascript
vue 1.0 结合animate.css定义动画效果
Jul 11 Javascript
微信小程序实现简单跑马灯效果
May 26 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
Aug 09 Javascript
uniapp实现横向滚动选择日期
Oct 21 Javascript
关于angular 8.1使用过程中的一些记录
Nov 25 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使用数组实现队列
2012/02/05 PHP
PHP实现变色验证码实例
2014/01/06 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
js日期联动示例
2014/05/02 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
vue实现数据控制视图的原理解析
2020/01/07 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
Python基类函数的重载与调用实例分析
2015/01/12 Python
python flask实现分页的示例代码
2018/08/02 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
python视频按帧截取图片工具
2019/07/23 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
基于python 取余问题(%)详解
2020/06/03 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
学生思想表现的评语
2014/01/30 职场文书
幼儿园美术教学反思
2014/01/31 职场文书
优秀高中生事迹材料
2014/02/11 职场文书
教师先进事迹材料
2014/12/16 职场文书
个人政治思想总结
2015/03/05 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL