JS中绑定事件顺序(事件冒泡与事件捕获区别)


Posted in Javascript onJanuary 24, 2017

在JS中,绑定的事件默认的执行时间是在冒泡阶段执行,而非在捕获阶段(重要),这也是为什么当父类和子类都绑定了某个事件,会先调用子类绑定的事件,后调用父类的事件。直接看下面实例

<!Doctype html>
<html>
<head>
 <meta charset="utf-8">
 <title></title>
 <style type="text/css">
 *{margin:0;padding: 0;}
 </style>
</head>
<body>
<div id="id1" style="height:400px; border:1px solid #000;">
 <div id="id2" style="height:200px; border:1px solid #000;">
 <div id="id3" style="height:50px; border:1px solid #000;"></div>
 </div>
</div>
</body>
<script type="text/javascript">
 var obj1=document.getElementById('id1'); 
 obj1.addEventListener('click',function(){
 alert('id1');
 },false);
 var obj2=document.getElementById('id2');
 obj2.addEventListener('click',function(){
 alert('id2');
 },true);
 var obj3=document.getElementById('id3');
 obj3.addEventListener('click',function(){
 alert('id3');
 },true);
 /*如果第三个参数为true,则事件在捕获阶段执行,如果第三个参数为false,则事件在冒泡阶段执行*/
</script>
</html>

当点击id3元素时候,执行结果是:id2,id3,id1

解析:因为obj2与obj3绑定的方法在捕获阶段执行,obj1的事件在冒泡阶段执行。

总结

在JS中,绑定的事件默认的执行时间是在冒泡阶段执行,而非在捕获阶段,必须要理解

不过我们可以通过绑定事件时,指定事件执行时间是在冒泡阶段还是捕获阶段。

obj.addEventListener(event,function(){},bool)

bool:false,代表冒泡阶段执行

bool:true,代表捕获阶段执行

JS在默认情况下获取事件后,就开始从根元素开始捕获所有该事件的监听对象,然后在冒泡阶段逐一执行。捕获阶段是在冒泡阶段前面

阻止冒泡

w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true;

阻止默认行为

w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false;

关于JS 事件冒泡和onclick,click,on()事件触发顺序

onclick,click,on()的优先关系:onclick>click>on();

onclick和click绑定的事件,彼此之间遵守事件冒泡规则,从内到外触发;

on()绑定的事件,总是晚于onclick和click绑定的事件触发;

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
js之WEB开发调试利器:Firebug 下载
Jan 13 Javascript
JavaScript 题型问答有答案参考
Feb 17 Javascript
基于jquery的超简单上下翻
Apr 20 Javascript
面向对象的Javascript之三(封装和信息隐藏)
Jan 27 Javascript
JavaScript基础语法让人疑惑的地方小结
May 23 Javascript
jquery怎样实现ajax联动框(二)
Mar 08 Javascript
使用jquery修改表单的提交地址基本思路
Jun 04 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
May 10 Javascript
正则表达式替换html元素属性的方法
Nov 26 Javascript
jQuery按需加载轮播图(web前端性能优化)
Feb 17 Javascript
vue结合element-ui使用示例
Jan 24 Javascript
如何实现iframe父子传参通信
Feb 05 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
Jan 24 #Javascript
JavaScript解析JSON格式数据的方法示例
Jan 24 #Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
Jan 24 #Javascript
Jquery树插件zTree实现菜单树
Jan 24 #Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
Jan 24 #Javascript
树结构之JavaScript
Jan 24 #Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 #Javascript
You might like
PHP XML数据解析代码
2010/05/26 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
python实现的汉诺塔算法示例
2019/10/23 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
传播学专业毕业生自荐信
2013/11/04 职场文书
励志演讲稿300字
2014/08/21 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
世界红十字日活动总结
2015/02/10 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
行政答辩状范文
2015/05/21 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
Java spring单点登录系统
2021/09/04 Java/Android
详解Vue的列表渲染
2021/11/20 Vue.js