我正在尝试为 WinJS 中的自定义事件编写事件处理程序。我不太确定这在 IE 中是如何工作的 - 我正在创建一个自定义事件并发送它 -
var eventObject = document.createEvent("CustomEvent");
eventObject.initCustomEvent("dropbomb", true, true, null);
this._element.dispatchEvent(eventObject);
我的处理程序是 -
this._element.addEventListener("logtelemetry", function () {
console.log("boom");
});
我能确定处理程序将同步调用而不是稍后调用吗?如果是,那么证据是什么。
最佳答案
它保证是同步的,因为:
The return value of dispatchEvent indicates whether any of the listeners which handled the event called preventDefault.
由于返回值指示是否有任何监听器处理了调用 preventDefault 的事件,因此该方法必须阻塞(不返回)直到所有监听器执行完毕,这是同步调用的定义。
以上引文摘自the dispatchEvent specification in DOM Level 2 Events , 于 2000 年 11 月获得“推荐”状态(标准)。Internet Explorer 已遵守此标准 since at least IE 9 .
要自己验证,请在 .dispatchEvent
调用后立即添加 console.log
语句,并注意 “boom”
(来自您的事件处理程序)总是首先记录。
关于javascript - dispatchEvent 是同步函数还是异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15277800/