全面了解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 相关文章推荐
jQuery开发者都需要知道的5个小技巧
Jan 08 Javascript
JavaScript DOM学习第六章 表单实例
Feb 19 Javascript
Javascript 网页水印(非图片水印)实现代码
Mar 01 Javascript
分享27款非常棒的jQuery 表单插件
Mar 28 Javascript
javascript验证身份证完全方法具体实现
Nov 18 Javascript
Bootstrap每天必学之标签与徽章
Nov 27 Javascript
jquery+json实现数据二级联动的方法
Nov 28 Javascript
js实现动态显示时间效果
Mar 06 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 Javascript
bootstrap3-dialog-master模态框使用详解
Aug 22 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
Apr 04 Javascript
JavaScript使用prototype属性实现继承操作示例
May 22 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
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
js 图片等比例缩放代码
2010/05/13 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
jquery与js实现全选功能的区别
2017/06/11 jQuery
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
跟老齐学Python之一个免费的实验室
2014/09/14 Python
python实现的系统实用log类实例
2015/06/30 Python
Python实现的快速排序算法详解
2017/08/01 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
python web框架 django wsgi原理解析
2019/08/20 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
Linux的主要特性
2014/10/06 面试题
《天安门广场》教学反思
2014/04/23 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
地方白酒代理协议书
2014/10/25 职场文书
试用期转正工作总结2015
2015/05/28 职场文书
消夏晚会主持词
2015/06/30 职场文书