2012-01-27 52 views
6

I 認爲事件處理程序按它們註冊的順序進行處理。 (這是否正確?)如果是這種情況,那麼如果我在腳本的開頭添加了一個事件處理程序,我可以絕對確定它會在隨後的處理程序附加到相同事件之前觸發嗎?還有事件命名空間對此有什麼影響?是否事件處理程序是串聯的(一個在下一個之前完成)還是並行?確保jQuery事件處理程序執行順序

我想這樣做是因爲我的腳本依賴於視口大小,該大小會在resize事件中發生變化,我需要不斷地查找它。我不想在每個處理函數中重複調用$(window).width(),而是希望在腳本的頂部放置一個處理程序,該處理程序將$(window).width()保存到每個調整大小的對象屬性。然後在後來的處理程序中,我可以訪問該屬性並確定它是最新的度量。

我知道我可以創建一個自定義事件,只要計算完成就觸發,並將後續處理程序附加到自定義事件。但是,我不想這樣做,因爲我需要保持與我之後發佈的插件的互操作性,這些插件也可能附加到resize事件。

+1

查看http://stackoverflow.com/questions/290254/how-to-order-events-bound-with-jquery – ustun 2012-01-27 17:04:14

+0

您是否失去了對'$(window).width()'的顯着性能?如果不是,爲什麼要麻煩?你只會引入對全局變量狀態的脆弱依賴。 – millimoose 2012-01-27 17:05:19

+0

@Inerdial我需要調用它和其他一些計算,如20次。我認爲這會有所作爲。 – ryanve 2012-01-27 17:08:55

回答

4

如果您在任何其他腳本運行之前附加了您的事件處理函數(甚至只是一個插件),那麼您的回調將始終觸發。

您可以通過數據對象檢查事件處理程序的數組:

$(window).data('events'); 

注:這是一種非成文規定,可能無法最終奏效。僅用於檢查。

+0

對不起,有沒有一種方法來訪問與純Javascript? – 2012-01-27 17:07:15

+3

@AndréAlçadaPadez - 沒有。不僅如此,這隻會給你使用jQuery附加的事件處理程序。 – 2012-01-27 17:08:39

+1

謝謝,我有很多麻煩的事件:) – 2012-01-27 17:09:23

相關問題