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 相关文章推荐
javascript smipleChart 简单图标类
Jan 12 Javascript
下拉列表select 由左边框移动到右边示例
Dec 04 Javascript
javaScript 计算两个日期的天数相差(示例代码)
Dec 27 Javascript
JavaScript实现列出数组中最长的连续数
Dec 29 Javascript
javascript中的正则表达式使用指南
Mar 01 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
Sep 01 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
基于JS+Canves实现点击按钮水波纹效果
Sep 15 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
Mar 02 Javascript
vue双向绑定简要分析
Mar 23 Javascript
浅谈Vue.use到底是什么鬼
Jan 21 Javascript
Antd下拉选择,自动匹配功能的实现
Oct 24 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
for循环连续求和、九九乘法表代码
2012/02/20 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
如何用php获取文件名后缀
2013/06/09 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
使用javascript实现Iframe自适应高度
2014/12/24 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
教大家使用Python SqlAlchemy
2016/02/12 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
网络安全方面的面试题
2016/01/07 面试题
法学专业个人求职信
2013/09/26 职场文书
优秀护士先进事迹
2014/05/08 职场文书
教师一帮一活动总结
2014/07/08 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
浅谈Python协程asyncio
2021/06/20 Python