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实现表格奇数偶数行不同样式(有图为证及实现代码)
Jan 23 Javascript
offsetHeight在OnLoad中获取为0的现象
Jul 22 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
Nov 27 Javascript
JS通过Cookie判断页面是否为首次打开
Feb 05 Javascript
JavaScript常用判断写法大全(推荐)
May 30 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
Dec 22 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
Mar 13 Javascript
html5+canvas实现支持触屏的签名插件教程
May 08 Javascript
jQuery+ajax实现局部刷新的两种方法
Jun 08 jQuery
Vue动态组件实例解析
Aug 20 Javascript
Vue不能观察到数组length的变化
Jun 08 Javascript
layer iframe 设置关闭按钮的方法
Sep 12 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版本实现代码
2012/09/15 PHP
php实现telnet功能示例
2014/04/08 PHP
laravel 数据验证规则详解
2019/10/23 PHP
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
小程序实现留言板
2018/11/02 Javascript
基于JavaScript canvas绘制贝塞尔曲线
2018/12/25 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
Python Pandas 如何shuffle(打乱)数据
2019/07/30 Python
python模拟实现分发扑克牌
2020/04/22 Python
销售自荐信
2013/10/22 职场文书
员工晚婚的请假条
2014/02/08 职场文书
《日月潭》教学反思
2014/02/28 职场文书
学雷锋月活动总结
2014/04/25 职场文书
励志演讲稿范文
2014/04/29 职场文书
文员求职信
2014/07/15 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
Redis过期数据是否会被立马删除
2022/07/23 Redis