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 相关文章推荐
用prototype实现的简单小巧的多级联动菜单
Mar 24 Javascript
xml和web特殊字符
Apr 28 Javascript
如何将JS的变量值传递给ASP变量
Dec 10 Javascript
纯js实现遮罩层效果原理分析
May 27 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
Jun 19 Javascript
微信小程序 页面跳转传参详解
Oct 28 Javascript
jQuery实现的简单拖动层示例
Feb 22 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
Nov 21 Javascript
JavaScript中concat复制数组方法浅析
Jan 20 Javascript
vue获取data数据改变前后的值方法
Nov 07 Javascript
vue ref如何获取子组件属性值
Mar 31 Vue.js
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 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
初探PHP5
2006/10/09 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
PHP json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
jquery自定义表单验证插件
2016/10/12 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
python简单分割文件的方法
2015/07/30 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
python scipy卷积运算的实现方法
2019/09/16 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
python3让print输出不换行的方法
2020/08/24 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
机械工程及自动化专业求职信
2014/09/03 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
创卫工作总结2015
2015/04/22 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python