iJa*_*ade 82 javascript events javascript-events
第三个参数(false)表示什么
document.addEventListener("deviceready",OnDeviceReady,false);
Run Code Online (Sandbox Code Playgroud)
任何人都可以显示示例脚本来显示差异
lon*_*day 313
这是出于历史原因.当浏览器事件系统首次设计时,有两种相互矛盾的方式来建模它的工作方式.它们被称为事件捕获和事件冒泡.
举个例子,这个HTML:
<html>
<body>
<a href="#">Content</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果a元素上发生了一个事件(例如点击),祖先元素是否应该知道?人们普遍认为他们应该这样做.但问题是应该以什么顺序通知他们.微软和Netscape的开发人员(这应该给你相当的想法如何,我们正在谈论历史!)有不同的意见.
一个模型是事件捕获(由Netscape开发人员提倡).这html首先通知了元素并在树下工作:
htmlbodya另一个模型是事件冒泡(由Microsoft开发人员提倡).这首先通知了目标元素,并在树上向上运行:
abodyhtml最终的妥协是它应该做到这两点.
html (捕获阶段)body (捕获阶段)a (捕获阶段)a (冒泡阶段)body (鼓泡阶段)html (冒泡阶段)因此,事件在树上运行,然后再次备份.
这是一个啰嗦的方式addEventListener.addEventListener侦听捕获阶段和冒泡阶段事件.第三个参数(useCapture在规范中调用)允许程序员指定他们想要使用哪个阶段.
在现代浏览器中,默认为false.您可能永远不会遇到想要使用捕获阶段的情况,尤其是因为Internet Explorer仍然不支持它.但旧浏览器需要false明确,因此通常提供向后兼容性.
lif*_*fus 12
它的useCapture:
如果
true,useCapture表示用户希望启动捕获.在启动捕获之后,指定类型的所有事件将被分派到已注册,listener然后被分派到EventTargetDOM树中它下面的任何s.向上冒泡树的事件不会触发指定使用捕获的侦听器.有关 详细说明,请参阅DOM Level 3 Events.