事件捕获与事件冒泡

Raj*_*jat 19 javascript javascript-events

我只是希望得到一个共识,即JS在冒泡和捕获之间更好的事件委派模式.

现在我明白,根据特定的用例,人们可能希望使用捕获阶段而不是冒泡,反之亦然,但我想了解哪种委派模式适用于大多数一般情况以及为什么(对我而言似乎冒泡模式).

换句话说,W3C addEventListener实现背后的原因是支持冒泡模式.[仅当您指定第3个参数及其true时才会启动捕获.但是,你可以忘记第三个参数和冒泡模式被踢了]

我抬头看了看JQuery的绑定功能得到一个回答我的问题,似乎它甚至不支持捕获阶段事件(在我看来,因为IE不支持拍摄模式).

所以看起来冒泡模式是默认选择,但为什么呢?

Mis*_*ter 10

在过去,这是一个平台问题,Internet Explorer有一个冒泡的模型,Netscape更多的是关于捕获(但两者都支持).

W3C型号要求您能够选择所需的型号.

我认为冒泡更受欢迎,因为正如所述,有些平台只支持冒泡...... 而且它有点像"默认"模式.

您选择哪一个主要是您正在做的事情和对您有意义的产品.

  • 因为IE,冒泡似乎是默认选择.这是我在prototype.js网站上发现的"在Prototype 1.6之前,Event.observe支持第四个参数(useCapture),一个布尔值,表示是使用浏览器的捕获阶段还是冒泡阶段.由于MSIE不支持捕获阶段,我们从1.6中删除了这个论点,以免给用户留下错误的印象,即他们可以在所有浏览器中使用捕获阶段." [http://api.prototypejs.org/dom/event/observe/] (3认同)

Spe*_*ams 7

在阅读JavaScript:The Definitive Guide,第5版时,我遇到了第422页的示例17-4,它定义了拖动绝对定位元素的函数.在该示例中,在文档元素drag()onmousedown属性中调用该函数.该函数根据鼠标位置的变化重新定位元素,由添加到根文档元素的处理程序查询捕获的mousemove和mouseup事件.他们在文档中捕获这些事件的原因如下:

重要的是要注意,mousemove和mouseup处理程序被注册为捕获事件处理程序,因为用户可以比文档元素跟随它更快地移动鼠标,并且这些事件中的一些发生在原始目标元素之外.

这表明在捕获事件时更快速响应的优势.

  • 这对我来说听起来像他们正在使用捕获来到达冒泡阶段的事件前面,并不一定是因为任何性能提升. (3认同)