我正在尝试为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");
});
我可以确定将同步调用处理程序而不是稍后调用吗?如果是,那么证据是什么。
答案 0 :(得分:20)
保证同步,因为:
dispatchEvent的返回值表示是否有任何 处理该事件的监听器名为preventDefault。
由于返回值指示是否有任何处理该事件的侦听器名为preventDefault,因此该方法必须阻塞(不返回),直到所有侦听器都执行完为止,这是同步调用的定义。
上述引文摘自the dispatchEvent specification in DOM Level 2 Events,并于2000年11月获得“推荐”状态(标准).Internet Explorer符合此标准since at least IE 9。
要自行验证,请在console.log
电话后立即添加.dispatchEvent
声明,并注意始终首先记录"boom"
(来自您的事件处理程序)。
答案 1 :(得分:1)
将使用WinJS.Utilities.eventMixin
的默认实现立即调用处理程序。没有延期。
您的个人处理程序可以选择使用setTimeout
/ setImmediate
/ setInterval
/ requestAnimationFrame
或其他一些自定义滚动来执行延期工作实施
请注意,如果您正在讨论DOM事件,请他们冒泡DOM元素树 - 我不是100%明确(可能有人可以在这里添加特定事件)