全面了解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复制功能调用实现方案
Dec 13 Javascript
javascript面向对象特性代码实例
Jun 12 Javascript
JS回调函数的应用简单实例
Sep 17 Javascript
JQuery在循环中绑定事件的问题详解
Jun 02 Javascript
关于Javascript中document.cookie的使用
Mar 08 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
Mar 27 Javascript
jQuery实现 RadioButton做必选校验功能
Jun 15 jQuery
JS写XSS cookie stealer来窃取密码的步骤详解
Nov 20 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
Nov 14 Javascript
如何能分清npm cnpm npx nvm
Jan 17 Javascript
vant IndexBar实现的城市列表的示例代码
Nov 20 Javascript
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 Vue.js
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)
2010/09/04 PHP
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
php异常处理方法实例汇总
2015/06/24 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
Python出现segfault错误解决方法
2016/04/16 Python
Python语言的变量认识及操作方法
2018/02/11 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
荷兰超市:DEEN
2018/03/14 全球购物
网络程序员自荐信
2014/01/25 职场文书
2014年冬季防火方案
2014/05/21 职场文书
医德考评自我评价
2014/09/14 职场文书
优秀校长事迹材料
2014/12/24 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
首都博物馆观后感
2015/06/05 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL