Anz*_*Anz 15 javascript javascript-events winjs windows-store-apps
我正在尝试为WinJS中的自定义事件编写事件处理程序.我不太确定这在IE中是如何工作的 - 我正在创建一个自定义事件并调度它 -
var eventObject = document.createEvent("CustomEvent");
eventObject.initCustomEvent("dropbomb", true, true, null);
this._element.dispatchEvent(eventObject);
Run Code Online (Sandbox Code Playgroud)
我的经纪人是 -
this._element.addEventListener("logtelemetry", function () {
console.log("boom");
});
Run Code Online (Sandbox Code Playgroud)
我可以确定将同步调用处理程序而不是稍后调用吗?如果是,那么证据是什么.
jar*_*obs 21
它保证是同步的,因为:
dispatchEvent的返回值指示是否有任何处理该事件的侦听器名为preventDefault.
由于返回值指示是否有任何处理该事件的侦听器名为preventDefault,因此该方法必须阻塞(不返回),直到所有侦听器都执行完为止,这是同步调用的定义.
以上引用摘自DOM Level 2 Events中的dispatchEvent规范,该规范在2000年11月获得了"推荐"状态(标准).Internet Explorer 至少从IE 9开始遵守此标准.
要自己验证,console.log请在.dispatchEvent通话后立即添加声明,并注意"boom"始终首先记录(来自您的事件处理程序).
该处理程序将立即使用WinJS.Utilities.eventMixin. 没有延期。
您的个人处理程序可以选择使用setTimeout//或其他一些自定义滚动实现来执行延迟工作。setImmediatesetIntervalrequestAnimationFrame
请注意,如果您正在谈论 DOM 事件,要求它们冒泡 DOM 元素树 - 我不是 100% 清楚(也许有人可以在此处添加具体内容)