第三个参数(false)在document.addEventListener中指示了什么(“deviceready”,OnDeviceReady,false);

时间:2013-07-10 07:01:21

标签: javascript events javascript-events

第三个参数(false)在

中表示什么
document.addEventListener("deviceready",OnDeviceReady,false);

任何人都可以显示示例脚本来显示差异

2 个答案:

答案 0 :(得分:282)

这是出于历史原因。当浏览器事件系统首次设计时,有两种相互矛盾的方式来建模它的工作方式。它们被称为事件捕获和事件冒泡。

例如,这个HTML:

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

如果a元素上发生了一个事件(例如点击),那么祖先元素是否应该知道?人们普遍认为他们应该这样做。但问题是以什么顺序应该通知他们。微软和Netscape的开发人员(这应该会让你对我们正在谈论的历史记录!)有不同的看法。

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

  • html
  • body
  • a

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

  • a
  • body
  • html

最终的妥协是它应该两者

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

所以事件在树上运行,然后再次备份。

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

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

答案 1 :(得分:11)

这是useCapture

  

如果trueuseCapture表示用户希望   发起捕获。启动后   捕获,指定的所有事件   类型将被发送到   在被记录之前注册listener   发送到下面的任何EventTarget   它在DOM树中。事件是   向上冒泡通过树会   不会触发指定的侦听器   使用捕获。见DOM Level 3 Events   有详细解释。