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自定义下拉列表示例
Apr 25 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
Jun 03 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
Jun 06 Javascript
jQuery实现点击水纹波动动画
Apr 10 Javascript
jQuery自制提示框tooltip改进版
Aug 01 Javascript
Javascript中arguments对象的详解与使用方法
Oct 04 Javascript
JS针对Array的各种操作汇总
Nov 29 Javascript
DOM事件探秘篇
Feb 15 Javascript
详解微信小程序 template添加绑定事件
Jun 23 Javascript
vuex与组件联合使用的方法
May 10 Javascript
Vue触发隐藏input file的方法实例详解
Aug 14 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
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 ADODB使用方法集锦
2008/03/25 PHP
php学习 字符串课件
2008/06/15 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
Session保存到数据库的php类分享
2011/10/24 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
js中if语句的几种优化代码写法
2011/03/12 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Python如何急速下载第三方库详解
2020/11/02 Python
如何将字串String转换成整数int
2015/02/21 面试题
面向对象设计的原则是什么
2013/02/13 面试题
用Python写一个for循环的例子
2016/07/19 面试题
工厂搬迁方案
2014/05/11 职场文书
留学推荐信英文范文
2015/03/26 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书