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 相关文章推荐
location对象的属性和方法应用(解析URL)
Apr 12 Javascript
jQuery常用数据处理方法小结
Feb 20 Javascript
node.js调用C++开发的模块实例
Jul 03 Javascript
js仿京东轮播效果 选项卡套选项卡使用
Jan 12 Javascript
Node.js中看JavaScript的引用
Apr 22 Javascript
微信小程序 同步请求授权的详解
Aug 04 Javascript
Node调用Java的示例代码
Sep 20 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
原生JS实现循环Nodelist Dom列表的4种方式示例
Feb 11 Javascript
Vue的elementUI实现自定义主题方法
Feb 23 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
May 08 Javascript
Vue使用Three.js加载glTF模型的方法详解
Jun 14 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
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
python框架flask表单实现详解
2019/11/04 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
台湾旅游网站:灿星旅游
2018/10/11 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
竞选部门副经理的自荐书范文
2014/02/11 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
经营目标责任书
2015/05/08 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL
mysql查找连续出现n次以上的数字
2022/05/11 MySQL