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开源框架-jQuery使用手册(1)
Mar 10 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
Jun 19 Javascript
JQuery AJAX提交中文乱码的解决方案
Jul 02 Javascript
JavaScript的漂亮的代码片段
Jun 05 Javascript
jquery实现按Enter键触发事件示例
Sep 10 Javascript
js改变文章字体大小的实例代码
Nov 27 Javascript
网页中JS函数自动执行常用三种方法
Mar 30 Javascript
开启BootStrap学习之旅
May 04 Javascript
jquery属性,遍历,HTML操作方法详解
Sep 17 Javascript
JS实现隔行换色的表格排序
Mar 27 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
Nov 13 jQuery
微信小程序swiper左右扩展各显示一半代码实例
Dec 05 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
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
javascript数组的扩展实现代码集合
2008/06/01 Javascript
js 图片等比例缩放代码
2010/05/13 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
2016/12/16 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
Python连接DB2数据库
2016/08/27 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
Python中extend和append的区别讲解
2019/01/24 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
输入N,打印N*N矩阵
2012/02/20 面试题
小学生操行评语大全
2014/04/22 职场文书
支行行长竞聘报告
2014/11/06 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
导游词之无锡古运河
2019/11/14 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js