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 相关文章推荐
可缩放Reloaded-一个针对可缩放元素的复用组件
Mar 10 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
May 07 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
Jul 29 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
JQuery中DOM事件冒泡实例分析
Jun 13 Javascript
js 求时间差的实现代码
Apr 26 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
Jun 17 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
Aug 02 Javascript
ES6 Generator函数的应用实例分析
Jun 26 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 Javascript
jQuery实现消息弹出框效果
Dec 10 jQuery
jquery html添加元素/删除元素操作实例详解
May 20 jQuery
手机软键盘弹出时影响布局的解决方法
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
function.inc.php超越php
2006/12/09 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
javascript 函数调用规则
2009/08/26 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
Javascript Objects详解
2014/09/04 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
探究JavaScript中的五种事件处理程序方式
2016/12/07 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
用Python编写简单的定时器的方法
2015/05/02 Python
Python编程中的for循环语句学习教程
2015/10/14 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
Python 忽略warning的输出方法
2018/10/18 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
大学生的网络创业计划书
2013/12/26 职场文书
国窖1573广告词
2014/03/21 职场文书
求职信结尾怎么写
2014/05/26 职场文书
先进工作者推荐材料
2014/12/23 职场文书
小学教代会开幕词
2016/03/04 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android