dispatchEvent是同步还是异步函数
我想在WinJS中为自定义事件编写事件处理函数。我也不太清楚如何工作的IE浏览器 - 我创建一个自定义事件,并派遣了 -dispatchEvent是同步还是异步函数
var eventObject = document.createEvent("CustomEvent");
eventObject.initCustomEvent("dropbomb", true, true, null);
this._element.dispatchEvent(eventObject);
我的处理程序是 -
this._element.addEventListener("logtelemetry", function() {
console.log("boom");
});
我可以肯定,该处理器将被调用同步,而不是在以后的时间?如果是这样,那么证明是什么。
处理程序将立即被调用,使用WinJS.Utilities.eventMixin
的默认实现。 Theres不推迟。
你个别处理可以选择使用setTimeout
/setImmediate
/setInterval
/,或其他自定义卷执行办延期工作。
请注意,如果你是在谈论DOM事件,要求他们冒泡的DOM元素树 - 我不是100%清楚(也许有人可以在这里补充特定)
期待看到['setImmediate'](https://developer.mozilla.org/en/docs/Web/API/Window/setImmediate)规范作为标准! – 2016-11-23 17:16:19
它保证是同步因为:
dispatchEvent的返回值指示处理该事件的任何 侦听器名为preventDefault。
由于返回值指示是否任何处理称为的preventDefault该事件的监听器,所述方法必须阻塞(未返回),直到所有的听众的完成执行,这是一个同步调用的定义。
以上引用摘自the dispatchEvent specification in DOM Level 2 Events,它于2000年11月实现了“推荐”状态(标准).Internet Explorer已符合此标准since at least IE 9。
要验证你自己,你.dispatchEvent
调用后立即添加console.log
声明,并注意"boom"
(从事件处理程序)总是先登录。
@Mathletics,为什么?如果你手动发送事件,为什么它不会立即触发? – gdoron 2013-03-07 17:33:31
@gdoron我想我不知道。在阅读文档时,行为真的不清楚。 – Mathletics 2013-03-07 17:37:15
@Mathletics,我的答案的重点...... :) – gdoron 2013-03-07 17:38:19