全面了解addEventListener和on的区别


Posted in Javascript onJuly 14, 2016

为什么需要addEventListener?

先来看一个片段:

html代码

<div id="box">追梦子</div>

用on的代码

window.onload = function(){
  var box = document.getElementById("box");
  box.onclick = function(){
    console.log("我是box1");
  }
  box.onclick = function(){
    box.style.fontSize = "18px";
    console.log("我是box2");
  }
}

 运行结果:“我是box2”

看到了吧,第二个onclick把第一个onclick给覆盖了,虽然大部分情况我们用on就可以完成我们想要的结果,但是有时我们又需要执行多个相同的事件,很明显如果用on完成不了我们想要的,那不用猜,你们肯定知道了,对!addEventListener可以多次绑定同一个事件并且不会覆盖上一个事件。

用addEventListener的代码

window.onload = function(){
  var box = document.getElementById("box");
  box.addEventListener("click",function(){
    console.log("我是box1");
  })
  box.addEventListener("click",function(){
    console.log("我是box2");
  })
}

运行结果:我是box1




 我是box2

addEventListenert方法第一个参数填写事件名,注意不需要写on,第二个参数可以是一个函数,第三个参数是指在冒泡阶段还是捕获阶段处理事件处理程序,如果为true代表捕获阶段处理,如果是false代表冒泡阶段处理,第三个参数可以省略,大多数情况也不需要用到第三个参数,不写第三个参数默认false

第三个参数的使用

有时候的情况是这样的

<body>

<div id="box">

<div id="child"></div>

</div>
</body>

如果我给box加click事件,如果我直接单击box没有什么问题,但是如果我单击的是child元素,那么它是怎么样执行的?(执行顺序)

box.addEventListener("click",function(){
  console.log("box");
})

child.addEventListener("click",function(){
  console.log("child");
})
执行的结果:




child




box

也就是说,默认情况事件是按照事件冒泡的执行顺序进行的。

如果第三个参数写的是true,则按照事件捕获的执行顺序进行的。

box.addEventListener("click",function(){
  console.log("box");
},true)

child.addEventListener("click",function(){
  console.log("child");
})
执行的结果:




box




child

事件冒泡执行过程:

从最具体的的元素(你单击的那个元素)开始向上开始冒泡,拿我们上面的案例讲它的顺序是:child->box

事件捕获执行过程:

从最不具体的元素(最外面的那个盒子)开始向里面冒泡,拿我们上面的案例讲它的顺序是:box->child

以上这篇全面了解addEventListener和on的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个收集图片的bookmarlet(js 刷新页面中的图片)
May 27 Javascript
JS正则中的RegExp对象对象
Nov 07 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
Dec 28 Javascript
JavaScript实现页面跳转的方式汇总
May 16 Javascript
js制作支付倒计时页面
Oct 21 Javascript
通过原生JS实现为元素添加事件的方法
Nov 23 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 Javascript
VUE-cli3使用 svg-sprite-loader
Oct 20 Javascript
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 Javascript
详解原生JS回到顶部
Mar 25 Javascript
JS实现数据动态渲染的竖向步骤条
Jun 24 Javascript
js计算系统当前日期是星期几的方法
Jul 14 #Javascript
原生javascript 学习之js变量全面了解
Jul 14 #Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
Jul 14 #Javascript
AngularJS实用开发技巧(推荐)
Jul 13 #Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 #Javascript
js实现可键盘控制的简单抽奖程序
Jul 13 #Javascript
原生js仿jquery animate动画效果
Jul 13 #Javascript
You might like
在PHP的图形函数中显示汉字
2006/10/09 PHP
php笔记之常用文件操作
2010/10/12 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
php的4种常见运行方式
2015/03/20 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
清空上传控件input file的值
2010/07/03 Javascript
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
2016/12/13 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
python中的对象拷贝示例 python引用传递
2014/01/23 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
优秀党员事迹材料
2014/12/18 职场文书
七个Python必备的GUI库
2021/04/27 Python
分享7个 Python 实战项目练习
2022/03/03 Python
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫