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 相关文章推荐
javascript 写的一个简单的timer
Jul 30 Javascript
基于jquery的商品展示放大镜
Aug 07 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
May 31 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
Jan 10 Javascript
基于JavaScript实现点击页面任何位置返回
Aug 31 Javascript
微信小程序开发教程-手势解锁实例
Jan 06 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
jQuery滑动到底部加载下一页数据的实例代码
May 22 jQuery
微信小程序多张图片上传功能
Jun 07 Javascript
微信小程序调用微信支付接口的实现方法
Apr 29 Javascript
详解vue项目中实现图片裁剪功能
Jun 07 Javascript
vue 子组件修改data或调用操作
Aug 07 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 管理系统程序中的后门
2009/08/05 PHP
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
PHP捕获Fatal error错误的方法
2014/06/11 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
js的一些常用方法小结
2011/06/29 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
angular2实现统一的http请求头方法
2018/08/13 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
多个应用共存的Django配置方法
2018/05/30 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
对python3新增的byte类型详解
2018/12/04 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
python爬虫要用到的库总结
2020/07/28 Python
python re的findall和finditer的区别详解
2020/11/15 Python
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
小学生交通安全寄语
2015/02/27 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
python井字棋游戏实现人机对战
2022/04/28 Python
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript
如何基于python实现单目三维重建详解
2022/06/25 Python