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 相关文章推荐
jQuery代码优化 遍历篇
Nov 01 Javascript
JSON.stringify 语法实例讲解
Mar 14 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
Mar 13 Javascript
JavaScript中SetInterval与setTimeout的用法详解
Nov 10 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
Feb 19 Javascript
JS判断两个对象内容是否相等的方法示例
Apr 10 Javascript
js事件委托和事件代理案例分享
Jul 25 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
Feb 26 Javascript
关于JavaScript轮播图的实现
Nov 20 Javascript
手机软键盘弹出时影响布局的解决方法
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中GET变量的使用
2006/10/09 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
angularjs表格分页功能详解
2016/01/21 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
vue实现计步器功能
2019/11/01 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
Python函数返回值实例分析
2015/06/08 Python
深入理解python try异常处理机制
2016/06/01 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
python3 pygame实现接小球游戏
2019/05/14 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
文员岗位职责
2013/11/09 职场文书
英语演讲稿范文
2014/01/03 职场文书
迎八一活动主题
2014/01/31 职场文书
任命书怎么写
2014/06/04 职场文书
消防宣传口号
2014/06/16 职场文书
2014年安全生产责任书
2014/07/22 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL
Golang 实现WebSockets
2022/04/24 Golang
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js