2013-03-07 223 views
10

我想在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"); 
}); 

我可以肯定,該處理器將被調用同步,而不是在以後的時間?如果是這樣,那麼證明是什麼。

+0

@Mathletics,爲什麼?如果你手動發送事件,爲什麼它不會立即觸發? – gdoron 2013-03-07 17:33:31

+0

@gdoron我想我不知道。在閱讀文檔時,行爲真的不清楚。 – Mathletics 2013-03-07 17:37:15

+0

@Mathletics,我的答案的重點...... :) – gdoron 2013-03-07 17:38:19

回答

1

處理程序將立即被調用,使用WinJS.Utilities.eventMixin的默認實現。 Theres不推遲。

個別處理可以選擇使用setTimeout/setImmediate/setInterval/​​,或其他自定義卷執行辦延期工作。

請注意,如果你是在談論DOM事件,要求他們冒泡的DOM元素樹 - 我不是100%清楚(也許有人可以在這裏補充特定)

+0

期待看到['setImmediate'](https://developer.mozilla.org/en/docs/Web/API/Window/setImmediate)規範作爲標準! – 2016-11-23 17:16:19

12

它保證是同步因爲:

dispatchEvent的返回值指示處理該事件的任何 偵聽器名爲preventDefault。

由於返回值指示是否任何處理稱爲的preventDefault該事件的監聽器,所述方法必須阻塞(未返回),直到所有的聽衆的完成執行,這是一個同步調用的定義。

以上引用摘自the dispatchEvent specification in DOM Level 2 Events,它於2000年11月實現了「推薦」狀態(標準).Internet Explorer已符合此標準since at least IE 9

要驗證你自己,你.dispatchEvent調用後立即添加console.log聲明,並注意"boom"(從事件處理程序)總是先登錄。

+0

+1謝謝你,請讓我知道我錯了! – gdoron 2014-04-08 17:31:40

+0

很好的答案。僅供參考,createEvent/initCustomEvent不贊成使用CustomEvent()構造函數https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent – Ryan 2017-12-29 16:09:38

相關問題