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 使用手册(五)
Sep 23 Javascript
JavaScript 利用Cookie记录用户登录信息
Dec 08 Javascript
将string解析为json的几种方式小结
Nov 11 Javascript
JavaScript保留两位小数的2个自定义函数
May 05 Javascript
详解JavaScript的Polymer框架中的通知交互
Jul 29 Javascript
JavaScript知识点整理
Dec 09 Javascript
Bootstrap中data-target 到底是什么
Feb 14 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
Mar 24 Javascript
BootStrap daterangepicker 双日历控件
Jun 02 Javascript
node实现登录图片验证码的示例代码
Apr 20 Javascript
javascript定时器的简单应用示例【控制方块移动】
Jun 17 Javascript
微信小程序实现手势滑动效果
Aug 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
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
Python常用模块用法分析
2014/09/08 Python
Python中asyncore的用法实例
2014/09/29 Python
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
Python实现八皇后问题示例代码
2018/12/09 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
Django继承自带user表并重写的例子
2019/11/18 Python
Python hmac模块使用实例解析
2019/12/24 Python
python如何从键盘获取输入实例
2020/06/18 Python
如何利用python 读取配置文件
2021/01/06 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
大学生求职自荐信
2013/12/12 职场文书
大学生求职自我评价
2014/01/16 职场文书
工程质量月活动方案
2014/02/19 职场文书
初婚初育证明范本
2014/11/24 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
导游词之日月潭
2019/11/05 职场文书