全面了解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类中定义原型方法的两种实现的区别
Mar 08 Javascript
用javascript父窗口控制只弹出一个子窗口
Apr 10 Javascript
JavaScript高级程序设计 扩展--关于动态原型
Nov 09 Javascript
javascript级联下拉列表实例代码(自写)
May 10 Javascript
js中的referrer返回上一页使用介绍
Sep 26 Javascript
jQuery遍历Table应用示例
Apr 09 Javascript
angular 动态组件类型详解(四种组件类型)
Feb 22 Javascript
微信小程序教程系列之新建页面(4)
Apr 17 Javascript
php 解压zip压缩包内容到指定目录的实例
Jan 23 Javascript
小程序实现列表点赞功能
Nov 02 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
Aug 12 Javascript
React+Redux实现简单的待办事项列表ToDoList
Sep 29 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中的traits简单使用实例
2015/05/13 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
js 覆盖和重载 函数
2009/09/25 Javascript
Javascript中的变量使用说明
2010/05/18 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
js如何打印object对象
2015/10/16 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
python多重继承实例
2014/10/11 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
pywinauto自动化操作记事本
2019/08/26 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
Python request使用方法及问题总结
2020/04/26 Python
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
花卉与景观设计系大学生求职信
2013/10/01 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
2014年团支书工作总结
2014/11/14 职场文书
责任书格式
2015/01/29 职场文书
新学期家长寄语2016
2015/12/03 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书