我在仅限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;
但是从Chrome V53开始,它不再有效,它会触发附加事件但不再触发并跟随锚点?
我已经更改了代码,此方法仍然有效。
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;
我尝试使用FireFox v48中的代码段并获得相同的结果,但该应用程序永远不会在FireFox中运行。
有一些规格发生了变化,我试图寻找答案但是还没找到原因吗?
答案 0 :(得分:3)
click
是MouseEvent
,而不是CustomEvent
。如果您使用new MouseEvent('click')
,则可以使用。
大概是一个错误修正,因为CustomEvent
不应该首先触发链接。
使用new MouseEvent
代替new CustomEvent
:
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;