122

What does the third parameter (false) indicate in

document.addEventListener("deviceready",OnDeviceReady,false);

Can any one show an example script to show the difference

4

2 回答 2

435

这是出于历史原因。最初设计浏览器事件系统时,有两种相互冲突的方式对其工作方式进行建模。它们被称为事件捕获和事件冒泡。

以这个 HTML 为例:

<html>
    <body>
        <a href="#">Content</a>
    </body>
</html>

如果元素上发生事件(例如单击)a,祖先元素是否应该知道?人们普遍认为他们应该这样做。但问题是应该按照什么顺序通知他们。Microsoft 和 Netscape 的开发人员(这应该让您了解我们所谈论的历史!)有不同的意见。

一种模型是事件捕获(由 Netscape 开发人员提倡)。这首先通知了html元素并沿着树向下工作:

  • html
  • body
  • a

另一种模型是事件冒泡(由 Microsoft 开发人员提倡)。这首先通知了目标元素,然后沿着树向上工作:

  • a
  • body
  • html

最终的妥协是它应该两者都做。

  • html(捕获阶段)
  • body(捕获阶段)
  • a(捕获阶段)
  • a(冒泡阶段)
  • body(冒泡阶段)
  • html(冒泡阶段)

因此,该事件沿树向下运行,然后再次备份。

这是一种冗长的到达方式addEventListeneraddEventListener监听捕获阶段和冒泡阶段事件。第三个参数(useCapture在规范中调用)允许程序员指定他们想要使用的阶段。

在现代浏览器中,默认为false. 您可能永远不会遇到想要使用捕获阶段的情况,尤其是在 Internet Explorer 仍然不支持它的情况下。但是旧的浏览器需要false明确的,所以它通常是为了向后兼容而提供的。

于 2013-07-10T07:13:01.190 回答
18

它是useCapture

如果trueuseCapture表示用户希望开始捕获。启动捕获后,所有指定类型的事件都将被分派给已注册的,然后再分派给DOM 树中它下面的listener任何s。EventTarget通过树向上冒泡的事件不会触发指定使用捕获的侦听器。有关详细说明,请参阅DOM 级别 3 事件

于 2013-07-10T07:02:34.100 回答