2

我想在 target.addEventListener(type, listener[, useCapture]) 的监听器方法中确定 useCapture 的布尔值。有没有办法做到这一点,或者有可能吗?

target.addEventListener(type, listener[, useCapture]);
divs[i].addEventListener("click", listener, false);

function listener()
{
    //Determine the false of useCapture here;
}
4

2 回答 2

0

如果没有为监听器传递不同的值useCaputre,您可以检查监听器是否处于捕获阶段。

var useCapture = event.eventPhase === Event.CAPTURING_PHASE;
于 2015-10-30T22:39:10.153 回答
0

活动分为三个阶段

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

  • 目标阶段:事件对象必须到达事件对象的事件目标。此阶段也称为 目标阶段。为该阶段注册的事件侦听器必须在事件到达其目标后对其进行处理。如果事件类型指示事件不能冒泡,则事件对象必须在此阶段完成后停止。

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

eventPhase您可以通过 的属性知道当前阶段event

但是,问题在于没有完美的对应关系:

  • 如果event.eventPhase1(捕获阶段),则表示useCapturewas true
  • 如果event.eventPhase3(冒泡阶段),则表示useCapturewas false
  • 如果event.eventPhase2(在目标处),useCapture则可能是truefalse
于 2015-10-30T22:56:16.407 回答