11

我对事件监听器的概念有疑问。下面两个代码之间有什么区别我在真/假部分有疑问。当我用我的练习代码中的第二个代码替换第一个代码时,没有发生任何变化。

a.addEventListener("click", modifyText, true);
a.addEventListener("click", modifyText, false);
4

2 回答 2

14

true 和 false inaddEventListener是布尔值,指定是否需要捕获事件。

这是语法和详细信息

object.addEventListener (eventName, function, useCapture);

eventName:字符串,指定要侦听的事件的名称。此参数区分大小写!

function:表示事件发生时要调用的事件监听函数。当一个事件发生时,一个事件对象被初始化并作为第一个参数传递给事件处理程序。事件对象的类型取决于当前事件。

useCapture:布尔值,指定是否需要捕获事件。以下值之一:

false -> Register the event handler for the bubbling phase. 
true -> Register the event handler for the capturing phase.

冒泡和捕获阶段:

冒泡:事件对象以相反的顺序通过目标的祖先传播,从目标的父级开始,以 defaultView 结束。此阶段也称为冒泡阶段。为此阶段注册的事件侦听器必须在事件到达其目标后对其进行处理。

捕获:事件对象必须通过目标的祖先从 defaultView 传播到目标的父级。此阶段也称为捕获阶段。为此阶段注册的事件侦听器必须在事件到达其目标之前对其进行处理。

有关事件流的更多详细信息: DOM 事件架构

于 2013-02-11T07:16:46.433 回答
2

看看一些文档,例如MDN 上addEventListener

target.addEventListener(type, listener[, useCapture]);

使用捕获

如果为真,useCapture 表示用户希望启动捕获。启动捕获后,指定类型的所有事件将被分派到注册的侦听器,然后再分派到 DOM 树中它下面的任何 EventTarget。通过树向上冒泡的事件不会触发指定使用捕获的侦听器。有关详细说明,请参阅 DOM 级别 3 事件。请注意,此参数并非在所有浏览器版本中都是可选的。如果未指定,则 useCapture 为 false。

所以基本上它决定了事件是在捕获阶段还是在事件处理的冒泡阶段处理。

只要元素的父母(或孩子)没有任何类似的事件,就没有真正的区别。

于 2013-02-11T07:13:23.913 回答