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 相关文章推荐
用正则xmlHttp实现的偷(转)
Jan 22 Javascript
jquery 插件 任意位置浮动固定层
Dec 25 Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 Javascript
浅谈javascript中的DOM方法
Jul 16 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
jQuery+HTML5实现弹出创意搜索框层
Dec 29 Javascript
基于JavaScript实现拖动滑块效果
Feb 16 Javascript
javascript+html5+css3自定义提示窗口
Jun 21 Javascript
微信小程序分享海报生成的实现方法
Dec 10 Javascript
ES6模板字符串和标签模板的应用实例分析
Jun 25 Javascript
JS/CSS实现字符串单词首字母大写功能
Sep 03 Javascript
js prototype深入理解及应用实例分析
Nov 25 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
JAVA/JSP学习系列之六
2006/10/09 PHP
php 删除记录实现代码
2009/03/12 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
php设计模式 FlyWeight (享元模式)
2011/06/26 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php自定文件保存session的方法
2014/12/10 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
Python yield 使用浅析
2015/05/28 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
详解Python:面向对象编程
2019/04/10 Python
python线程中的同步问题及解决方法
2019/08/29 Python
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
实习会计求职自荐信范文
2014/03/10 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
教代会闭幕词
2015/01/28 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
周一问候语大全
2015/11/10 职场文书
canvas绘制折线路径动画实现
2021/05/12 Javascript
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers