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

2022-08-30 04:48:11

第三个参数 (false) 表示什么

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

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


答案 1

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

以这个 HTML 为例:

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

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

一种模式是事件捕获(由Netscape开发人员倡导)。这会首先通知该元素,然后沿着树向下工作:html

  • html
  • body
  • a

另一种模式是事件冒泡(由微软开发人员倡导)。这首先通知了目标元素,并在树上向上移动:

  • a
  • body
  • html

最终的妥协是,它应该同时做这两件事

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

因此,该事件沿着树向下工作,然后再次返回。

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

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


答案 2

它的用途捕获

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