Node.dispatchEvent(新的CustomEvent('点击'))自Chrome v53起不再触发锚点

时间:2016-09-21 14:27:25

标签: javascript google-chrome dom

我在仅限Chrome的网络应用程序中使用了以下代码,该程序已经运行了很长时间,当调度发生时,附加的侦听器被触发,并且触发并跟踪了锚点。



const id = document.getElementById('me');
id.addEventListener('click', e => console.log('clicked', e), false);
const cancelled = !id.dispatchEvent(new CustomEvent('click'));
if (cancelled) {
  console.log("canceled");
} else {
  console.log("not canceled");
}

<a id="me" href="https://jsfiddle.net/">xxx</a>
&#13;
&#13;
&#13;

但是从Chrome V53开始,它不再有效,它会触发附加事件但不再触发并跟随锚点?

我已经更改了代码,此方法仍然有效。

&#13;
&#13;
const id = document.getElementById('me');
id.addEventListener('click', e => console.log('clicked', e), false);
const evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
const cancelled = !id.dispatchEvent(evt);
if (cancelled) {
  console.log("canceled");
} else {
  console.log("not canceled");
}
&#13;
<a id="me" href="https://jsfiddle.net/">xxx</a>
&#13;
&#13;
&#13;

我尝试使用FireFox v48中的代码段并获得相同的结果,但该应用程序永远不会在FireFox中运行。

有一些规格发生了变化,我试图寻找答案但是还没找到原因吗?

1 个答案:

答案 0 :(得分:3)

clickMouseEvent,而不是CustomEvent。如果您使用new MouseEvent('click'),则可以使用。

大概是一个错误修正,因为CustomEvent不应该首先触发链接。

使用new MouseEvent代替new CustomEvent

&#13;
&#13;
const id = document.getElementById('me');
id.addEventListener('click', e => console.log('clicked', e), false);
const cancelled = !id.dispatchEvent(new MouseEvent('click'));
if (cancelled) {
  console.log("canceled");
} else {
  console.log("not canceled");
}
&#13;
<a id="me" href="https://jsfiddle.net/">xxx</a>
&#13;
&#13;
&#13;