全面了解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 相关文章推荐
js实现倒计时时钟的示例代码
Dec 17 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
jquery实现华丽的可折角广告代码
Sep 02 Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 Javascript
javascript中FOREACH数组方法使用示例
Mar 01 Javascript
vue实现微信二次分享以及自定义分享的示例
Mar 20 Javascript
微信小程序生成海报分享朋友圈的实现方法
May 06 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
Aug 01 Javascript
JavaScript enum枚举类型定义及使用方法
May 15 Javascript
Vue的自定义组件不能使用click方法的解决
Jul 28 Javascript
vue 组件间的通信之子组件向父组件传值的方式
Jul 29 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
Oct 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
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
javascript 面向对象编程基础 多态
2009/08/21 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
Python selenium根据class定位页面元素的方法
2019/02/26 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
python 弧度与角度互转实例
2020/04/15 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
文明之星事迹材料
2014/05/09 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
画展邀请函
2015/01/31 职场文书
nginx刷新页面出现404解决方案(亲测有效)
2022/03/18 Servers