2011-04-14 86 views
1

是否有可能以某種方式攔截DOM就緒事件,以便通常在$(document).ready(function() { ... }之內觸發的任何內容不會被執行?然後再手動觸發事件,使代碼被執行了jQuery:攔截原始DOM就緒事件?

在我的情況,我有大量的現有代碼已經依靠$(document).ready(function() { ... },我的希望是,我也不會做一個查找/替換有這一切依賴於定製的手動觸發事件。

回答

0

jQuery.trigger()是爲這樣的需要作出

附有 .bind()或它的快捷方式的方法 之一的任何事件處理程序,當對應 事件發生時被觸發。但是,可以使用.trigger() 方法手動觸發 。到.trigger()的調用在他們 是,如果事件是由用戶觸發 自然地以相同的順序執行 處理程序:

+0

但是,如何防止原始事件觸發?據我可以告訴e.preventDefault()在這種特殊情況下是不可能的。 – Wilco 2011-04-14 05:10:54

+0

當你不想在dom上觸發任何事件準備好然後爲什麼你在'準備好'裏面寫入 – diEcho 2011-04-14 05:13:11

+0

我基本上試圖避免重寫當前依賴於DOM就緒事件的大量現有腳本。我希望能有一些方法來攔截它,並在以後手動觸發它。 – Wilco 2011-04-14 05:22:16

0

如果你不想要的東西是「正常」觸發時,不應該在$(document).ready(on_ready_func)。一旦DOM被加載並且在加載頁面內容之前,它內部的所有東西都會加載。

取而代之的是,從on_ready_func中選擇您希望手動觸發到另一個函數中的內容,例如manual_func,並在您選擇的事件中調用該函數。

請注意,ready函數無法使用觸發器觸發,因此您不能再次觸發func,除非您將其作爲單獨的函數使用。

拆分是你最好的選擇。

var manual_func = function(){ 
    // Manual loads 
} 

var on_ready_func = function(){ 
    // only things to be loaded on dom ready 
    // e.g. 

    $('button#load_manual_trigger').bind('click', manual_func); 
} 

$(document).ready(on_ready_func); 

快樂編碼。