关于DOM事件模型的两件事

2016-02-20 00:36 1 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享关于DOM事件模型的两件事教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - Web开发 】

事件捕捉(Event Capture)的实现问题 IE的高级事件处理模型的问题

一、事件捕捉(Event Capture)的实现问题

首先在说这件事前,先感谢一下Realazy。 

W3C DOM Level2的事件模型规范中,事件在DOM树中的传播过程(从根节点到目标节点)被分为了两个阶段:捕捉(Capture)和冒泡(Bubbling)。下面这个图能大概的说明整个过程:

关于DOM事件模型的两件事_网页教学网webjx.com整理转载
(from W3C)

如果想创建一个捕捉事件,在支持W3C 事件模型的浏览器中,将addEventListener的第三个参数设为true就好了。例如:

document.getElementById('foo').addEventListener('click',function(){alert('Hello, world!');},true);

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

前一阵因为想弄懂事件捕捉,所以做了点小实验,分别在Firefox 2、Safari 3 on Windows和Opera 9上实践了事件捕捉(当然,因为IE不支持事件捕捉,所以),实验的原理见下图:

关于DOM事件模型的两件事_网页教学网webjx.com整理转载

ID为div1和div2的两个元素都被委派了捕捉阶段的事件处理函数,这样:

当点击#div1(蓝色区域)时,应该会alert出div1″ 当点击#div2(黄色区域)时,应该会先alert出div1″,再alert出div2″,因为在事件捕捉阶段,事件是从根元素向下传播的,#div1是#div2的父元素,自然绑定在#div1上的click事件也会先于#div2上的click事件被执行。

然而,以上的设想只试用于Firefox 2和Safari 3 on Windows,在Opera 9中,事情会变成这样:

当点击#div1(蓝色区域)时,什么都不会发生 当点击#div2(黄色区域)时,会alert出div1″,随后什么都不会再发生

可以看出,在Opera 9中,目标元素(TargetElement)的click事件没有被执行。通过Realazy(orz)的指点,找到了这篇文章:《Event capture explained》,发现,

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

来Opera中的实现才是正确的。此文中有一段话如是说
The DOM spec states that capturing events should not fire on target, because the idea of a capturing event is to detect events before they reach their targets. Because of bugs in Gecko and Safari, web content that is tested mostly with Firefox or other Gecko-based browsers sometimes expects capturing listeners to fire on target. Such content will fail in Opera 7, 8 and current releases of 9 because of its correct implementation of the standard.

大意是说:DOM规范中陈述了捕捉型的事件不应该在目标元素上被执行,因为捕捉型事件的用意就是为了监测到达目标元素之前的事件。Firefox和Safari的实现都是带有bug的。

再来看看W3C的DOM Events规范中的原话
A capturing EventListener will not be triggered by events dispatched directly to the EventTarget upon which it is registered.

所以,在整个事件传播中,被执行的顺序是:

父元素中所有的捕捉型事件(如果有)自上而下地执行 目标元素的冒泡型事件(如果有) 父元素中所有的冒泡型事件(如果有)自下而上地执行

在了解了这些后,也许还是不要使用事件捕捉为妙,至少暂时不要。

来源:https://www.tulaoshi.com/n/20160220/1632205.html

延伸阅读
作为男人,当然都希望能娶到一位美丽大方并且能帮助自己的妻子。女人可以是家里的后备力量,也可能是不安因素的导火线。那么从面相分析,什么样的女人能旺夫呢?而男人喜欢什么样的女人呢?接下来一起看看吧。 爱做这两件事的女人是最旺夫 这类女士貌似在家庭中当家作主一言九鼎,或者事业成功风光无限,但是,在洞若观火的专...
标签: 女人养生
女人拥有好气血定要做这两件事 哪有女人不爱美的道理,女人的天性与爱美是分不开的,就像人每天吃饭、睡觉一样,是必不可少的。而且,如今这个时代早已是“一张脸走遍全世界”的时刻,所以可想而知,姣好面容的重要性!越来越多的女性群体开始疯狂的、“不择不断”的使用各种各样的护肤方式,力求达到比...
女人爱美必做两件事 补血通便 爱美是每个女人的天性,想让自己变得美丽,最重要的就是要补血和通便,外表的保养固然重要,但是内部气息的调理也是非常重要的。 养血 一、养血 女性天生有生理上的“磨难”——月经、怀孕、生产、哺乳,而且在这时有着耗血和失血的特点。“血为...
标签: 电脑入门
Windows7现在已经非常普及了,相比之前的Vista系统,Windows7的速度真的是很快了,但你是否担心自己的Windows7系统就像新安装其他Windows系统一样仅仅是刚开始运行飞快,随着时间的推移就会导致效率越来越低呢?想要保持自己的Windows7系统一直运行如飞并非是难事,下面将两个有效的优化小方法告诉你,让你保持Windows7的高速度运行。 1. 系统...
标签: 孕前
孕前准备之健康怀孕的10大守则 想要生一个健康聪明的宝宝,孕前准备工作少不了,为了达到健康怀孕这一目的,亲亲宝贝图老师小编提醒各位未准爸妈,一定要遵守孕前准备工作中的这10大守则,下面我们就一起来看看守则的具体内容吧。 守则之一:不要太胖或者太瘦 肥胖不但有可能危及身体健康,它还会使激...

经验教程

782

收藏

94
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部