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 相关文章推荐
自适应图片大小的弹出窗口
Jul 27 Javascript
javascript 时间比较实现代码
Oct 28 Javascript
Javascript 面向对象 命名空间
May 13 Javascript
js 实现菜单上下显示附效果图
Nov 21 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
Jun 01 Javascript
JavaScript Serializer序列化时间处理示例
Jul 31 Javascript
js创建对象的方法汇总
Jan 07 Javascript
js放大镜放大购物图片效果
Jan 18 Javascript
jQuery is not defined 错误原因与解决方法小结
Mar 19 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
Jan 13 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
Oct 08 Javascript
laypage.js分页插件使用方法详解
Jul 27 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 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
php抓取https的内容的代码
2010/04/06 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
2017/09/02 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
使用python实现省市三级菜单效果
2016/01/20 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
2020/03/27 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
中专生自荐信
2013/10/12 职场文书
讲文明倡议书
2015/04/29 职场文书
纪律委员竞选稿
2015/11/19 职场文书
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
详解JAVA的控制语句
2021/11/11 Java/Android