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 相关文章推荐
jQuery根据纬度经度查看地图处理程序
May 08 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
May 27 Javascript
使用javascript为网页增加夜间模式
Jan 26 Javascript
Javascript表单验证要注意的事项
Sep 29 Javascript
JS实现页面超时后自动跳转到登陆页面
Jan 19 Javascript
三个js循环的关键字示例(for与while)
Feb 16 Javascript
拖动时防止选中
Feb 03 Javascript
js实现方块上下左右移动效果
Aug 17 Javascript
重学JS之显示强制类型转换详解
Jun 30 Javascript
用vue 实现手机触屏滑动功能
May 28 Javascript
Vue Render函数原理及代码实例解析
Jul 30 Javascript
Vue项目利用axios请求接口下载excel
Nov 17 Vue.js
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
PHP框架Laravel学习心得体会
2015/10/28 PHP
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
Python中用于计算对数的log()方法
2015/05/15 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
Django的Modelforms用法简介
2019/07/27 Python
python构造函数init实例方法解析
2020/01/19 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
行政部总经理岗位职责
2014/01/04 职场文书
初一科学教学反思
2014/01/27 职场文书
高中军训第一天感言
2014/03/06 职场文书
保险公司年会主持词
2014/03/22 职场文书
上海世博会口号
2014/06/19 职场文书
网络技术专业求职信
2014/07/13 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
走近毛泽东观后感
2015/06/04 职场文书
创业计划书之农家乐
2019/10/09 职场文书
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技