全面了解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 相关文章推荐
javascript中的window.location.search方法简介
Sep 02 Javascript
在Linux上用forever实现Node.js项目自启动
Jul 09 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
Apr 06 Javascript
详解JavaScript ES6中的模板字符串
Jul 28 Javascript
如何实现json数据可视化详解
Nov 24 Javascript
微信小程序 自己制作小组件实例详解
Dec 22 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
Mar 10 Javascript
jQuery扩展_动力节点Java学院整理
Jul 05 jQuery
elementUI Tree 树形控件的官方使用文档
Apr 25 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
Oct 16 Javascript
JavaScript数组去重实现方法小结
Jan 17 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
May 06 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/12/06 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
分享一款基于jQuery的视频播放插件
2014/10/09 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
jQuery.each使用详解
2015/07/07 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
Anaconda入门使用总结
2018/04/05 Python
在Python中实现字典反转案例
2020/12/05 Python
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
优秀的自荐信要注意哪些
2014/01/03 职场文书
铁路个人事迹材料
2014/01/30 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
博士论文答辩开场白
2015/06/01 职场文书