javascript事件捕获机制【深入分析IE和DOM中的事件模型】


Posted in Javascript onDecember 15, 2016

本文实例分析了javascript事件捕获机制。分享给大家供大家参考,具体如下:

1.什么是事件冒泡?

在排序算法中,我们学过冒泡排序法,所谓冒泡就是让底层的东西浮出水面,对于事件冒泡也同样是如此,

下面我们来看一个例子来说明什么是事件冒泡。

<div>
 <button>测试</button>
</div>
<script>
 $("div").bind("click",function(){alert("div")});
 $("button").bind("click",function(){alert("button"});
</script>

当支持事件冒泡时,当我们点击"测试”按钮时,首先会执行的是alert("button"),固名思意:

事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。

当div,button,html根元素都有事件时,事件执行的顺序为:

button->div->html

2.什么是事件捕获?

我们再来看事件捕获,相对于事件捕获,处理时间的顺序与事件冒泡截然相反,同样:

<div>
 <button>测试</button>
</div>
<script>
 $("div").bind("click",function(){alert("div")});
 $("button").bind("click",function(){alert("button"});
</script>

执行这段代码,首先会alert("div"),其次会alert("button")。我们明确事件捕获的概念:

事件从最不精确的对象(document 对象)开始触发,然后到最精确。

同样的如果button,div,html元素上都有绑定事件,那么事件的实行顺序为:

html->div->button

3.各个版本的浏览器对事件的处理机制?

(1)在DOM中,即支持事件冒泡,也支持事件捕获,在W3C的标准中,认为任何事件都是从事件捕获出发,找到最终的结点,此后再进行冒泡,会到根结点。

DOM中支持事件绑定的函数为:

addEventListener("事件名",函数,userCapture);

对于userCapture参数,默认为false,支持事件冒泡。
若在userCapture参数,为true时,支持事件捕获。

(2)对于很多浏览器,都支持addEventListener方法,但是IE不支持!

(3) IE中的事件处理机制,IE中只支持事件冒泡,IE中有一个独有的事件绑定方法

attachEvent方法,此方法有两个参数:

attachEvent("事件名","函数名")

4.如何阻止事件的传播?

无论是事件冒泡还是事件捕获都是可以阻止的。

(1)首先在W3C中阻止事件的传播方法为:stopPropagation(),在IE中,通过设置

cancelBubble=true;

(2) 如何阻止事件的默认行为?在W3C标准中,使用preventDefault方法,在IE中通过设置

window.event.returnValue = false;

PS:关于javascript常用事件及相关说明还可参考本站在线工具:

javascript事件与功能说明大全:
http://tools.3water.com/table/javascript_event

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
个人总结的一些关于String、Function、Array的属性和用法
Jan 10 Javascript
Jquery动态改变图片IMG的src地址示例
Jun 25 Javascript
jQuery实现新消息闪烁标题提示的方法
Mar 11 Javascript
jquery限定文本框只能输入数字(整数和小数)
Jan 08 Javascript
AngularJS基础 ng-mouseover 指令简单示例
Aug 02 Javascript
浅谈Angular的$q, defer, promise
Dec 20 Javascript
Bootstrap fileinput文件上传预览插件使用详解
May 16 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
Jan 25 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
Apr 19 jQuery
vue使用技巧及vue项目中遇到的问题
Jun 04 Javascript
详解VUE调用本地json的使用方法
May 15 Javascript
全面解析Vue中的$nextTick
Dec 24 Vue.js
手机软键盘弹出时影响布局的解决方法
Dec 15 #Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 #Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
Dec 15 #Javascript
JavaScript实现Fly Bird小游戏
Dec 15 #Javascript
JS中对数组元素进行增删改移的方法总结
Dec 15 #Javascript
JS去除重复并统计数量的实现方法
Dec 15 #Javascript
javascript基于原型链的继承及call和apply函数用法分析
Dec 15 #Javascript
You might like
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
纯js实现动态时间显示
2020/09/07 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
Python中按值来获取指定的键
2019/03/04 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
python对Excel的读取的示例代码
2020/02/14 Python
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
运动会通讯稿50字
2014/01/30 职场文书
工程招投标邀请书
2014/01/30 职场文书
个人现实表现材料
2014/02/04 职场文书
善意的谎言事例
2014/02/15 职场文书
后勤主管岗位职责
2014/03/01 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
在校证明模板
2015/06/17 职场文书
小学运动会前导词
2015/07/20 职场文书
运动会宣传稿100字
2015/07/23 职场文书
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫