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 学习笔记 传智博客佟老师附详细注释
Sep 12 Javascript
jQuery 幻灯片插件(带缩略图功能)
Jan 24 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
Mar 22 Javascript
15个jquery常用方法、小技巧分享
Jan 13 Javascript
javascript中的Base64、UTF8编码与解码详解
Mar 18 Javascript
使用Node.js配合Nginx实现高负载网络
Jun 28 Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
Mar 31 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
原生js实现拖拽功能基本思路详解
Apr 18 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
Echarts实现多条折线可拖拽效果
Dec 19 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
PHPlet在Windows下的安装
2006/10/09 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
使用Python &amp; Flask 实现RESTful Web API的实例
2017/09/19 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
活动总结怎么写
2014/04/28 职场文书
综艺节目策划方案
2014/06/13 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
个人租房协议书范本
2014/09/30 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
Python 制作自动化翻译工具
2021/04/25 Python
golang slice元素去重操作
2021/04/30 Golang
详解nginx进程锁的实现
2021/06/14 Servers