js中addEventListener()与removeEventListener()用法案例分析


Posted in Javascript onMarch 02, 2020

本文实例讲述了js中addEventListener()与removeEventListener()用法。分享给大家供大家参考,具体如下:

所有的DOM节点中都包含addEventListener()与removeEventListener()这两种方法,用于追加事件和删除追加。

接受参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。 (3个)

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

事件传递有两种方式:冒泡与捕获。

事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?

冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

假如在一个按钮上添加一个点击事件,代码如下:

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);

在这个例子中,removeEventListener无法删除addEventListener所追加的事件,因为两个方法并不相等,内存地址已经是不同的,如下面的例子所示:

var btn = document.getElementById("myBtn");
var handler = function () {
     alert(this.id);
   };
btn.addEventListener("click", handler, false);
btn.removeEventListener("click", handler, false); //有效!

案例:

<div id="myDIV"> div 元素添加了 onmousemove 事件句柄,鼠标在桔红色的框内移动时会显示随机数。
 <p>点击按钮移除 DIV 的事件句柄。</p>
 <button onclick="removeHandler()" id="myBtn">点我</button>
</div>
<p id="demo"></p>
<script>
document.getElementById("myDIV").addEventListener("mousemove", myFunction);
function myFunction() {
  document.getElementById("demo").innerHTML = Math.random();
}
function removeHandler() {
  document.getElementById("myDIV").removeEventListener("mousemove", myFunction);
}
</script>

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JS 容错处理代码, 屏蔽错误信息
Mar 09 Javascript
在网页中使用document.write时遭遇的奇怪问题
Aug 24 Javascript
JavaScript初学者应注意的七个细节详细介绍
Dec 27 Javascript
js去除重复字符串两种实现方法
Jan 09 Javascript
JavaScript事件委托用法分析
Jan 24 Javascript
在JavaScript中操作数组之map()方法的使用
Jun 09 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
Oct 10 Javascript
JavaScript实现获取远程的html到当前页面中
Mar 26 Javascript
js遍历获取表格内数据的方法(必看)
Apr 06 Javascript
js实现动态添加上传文件页面
Oct 22 Javascript
详解JavaScript 作用域
Jul 14 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
Oct 26 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
Mar 02 #Javascript
原生js实现日历效果
Mar 02 #Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
Mar 02 #Javascript
详解Vue中的Props与Data细微差别
Mar 02 #Javascript
微信小程序实现音频文件播放进度的实例代码
Mar 02 #Javascript
不刷新网页就能链接新的js文件方法总结
Mar 01 #Javascript
vue学习笔记之slot插槽用法实例分析
Feb 29 #Javascript
You might like
Chrome Web App开发小结
2014/09/04 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
关于js datetime的那点事
2011/11/15 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
详解Python IO编程
2020/07/24 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
介绍一下linux文件系统分配策略
2013/02/25 面试题
机电专业个人自荐信格式模板
2013/09/23 职场文书
自学考试自我鉴定范文
2013/09/26 职场文书
财务会计专业求职信范文
2013/12/31 职场文书
学年末自我鉴定
2014/01/21 职场文书
行政副总岗位职责
2014/02/23 职场文书
求职教师自荐书
2014/06/19 职场文书
员工年终自我评价
2014/09/14 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
护理培训心得体会
2016/01/22 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android