2014-01-13 46 views
2

我有寫代碼:Javascript dispatchEvent - 爲什麼需要?

window.addEventListener("orientationchange", function() { 
    //code here; 
}, false); 

和正常工作......但我被告知由Mozilla開發頁面中加入:

elem.dispatchEvent(event); 

誰能告訴我爲什麼我需要添加派遣,以及爲什麼它沒有它(派遣實際上做的也是非常有用的!)。

W3C還建議在規範中刪除一個事件,但對於任何時候都可能發生的方向更改,可以將它留在那裏嗎?

非常感謝您的幫助。

+0

Waht是'elem'?什麼是'事件'?哪個MDN頁面? – apsillers

+0

此頁面:https://developer.mozilla.org/zh-CN/docs/Web/Guide/Events/Creating_and_triggering_events elem只是一個你正在處理的變量的佔位符,事件再次只是一個佔位符一個事件... – user1360809

回答

3

addEventListener說,對象(在你的例子window)上要作出反應每當對象調度和事件與給定類型(例如orientationchange

您現在收聽的是對象的事件。

dispatchEvent就是您要發送或觸發事件時所調用的內容。在內部,瀏覽器在用戶旋轉設備時會這樣做,這會觸發orientationchange。在這個特定的例子中,除非需要進行測試,否則不需要手動觸發。

removeEventListener做你所期望的,並使它不再監聽觸發事件。如果你知道你不想再聽這個事件,或者這個事件不會再被解僱,那麼你可以釋放內存資源,這樣做通常是很好的做法。對於你的情況,似乎你不需要這樣做。

這是關於DOM and JavaScript Events, http://www.w3schools.com/jsref/dom_obj_event.asp的更多信息。

+0

太好了,謝謝!所以在沒有派遣的正常情況下,事件不會觸發? 'removeEventListener'是否會停止先前的分發,因此再次添加它,我需要做的就是再次分派? – user1360809

+0

我認爲「正常情況」完全取決於你在哪些事件上談論哪些對象。 'removeEventListener'移除事件的處理程序。要再次添加,請使用'addEventListener'。如果你派遣一個事件而沒有任何事情正在監聽,那什麼都不會發生。 – lemieuxster

+0

好的,所以它取決於正在討論的事件和/或對象......被派遣用於觸發事件,比如說onClick,例如?另外,當我執行addEventListener時,我假設我將它添加到某個列表或對象的某個位置,並且在會話期間它保持活動狀態,這是正確的嗎?如果是這樣,你知道它在哪裏添加?謝謝! – user1360809

1

調度含義發送到目的地或出於某種目的。

dispatchEvent是create-init-dispatch過程的最後一步,用於將事件分派到實現的事件模型中。

EventTarget.dispatchEvent 

調度一個Event在指定EventTarget,以適當的順序調用影響EventListeners。正常的事件處理規則(包括捕獲和可選冒泡階段)適用於手動調度的事件dispatchEvent()

+1

謝謝,這是一個很好的方式來與它聯繫! – user1360809