全面了解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 选择器部分整理
Oct 28 Javascript
通过JavaScript控制字体大小的代码
Oct 04 Javascript
原生javascript实现无间缝滚动示例
Jan 28 Javascript
jQuery实现标题有打字效果的焦点图代码
Nov 16 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
Jan 28 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
Oct 25 Javascript
关于vue-cli 3配置打包优化要点(推荐)
Apr 22 Javascript
详解微信小程序用定时器实现倒计时效果
Apr 30 Javascript
微信小程序 image组件遇到的问题
May 28 Javascript
js最全的数组的降维5种办法(小结)
Apr 28 Javascript
15分钟上手vue3.0(小结)
May 20 Javascript
vue使用better-scroll实现滑动以及左右联动
Jun 30 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
python远程连接MySQL数据库
2019/04/19 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
EJB与JAVA BEAN的区别
2016/08/29 面试题
介绍一下Ruby的多线程处理
2013/02/01 面试题
机械设计及其自动化求职推荐信
2014/02/17 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
后进生评语大全
2015/01/04 职场文书
2015年导购员工作总结
2015/04/25 职场文书
国庆节新闻稿
2015/07/17 职场文书
培训简讯范文
2015/07/20 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
详解Python生成器和基于生成器的协程
2021/06/03 Python