2011-11-02 23 views
6

我有一個使用母版頁的MVC 2 Web應用程序。在母版頁,有幾個現成塊就像下面就散落在整個文件中如何確保我的jQuery .ready在最後運行

$(document).ready(function() { 
    ... 
}); 

同樣的一個,我的很多觀點也有多種準備塊散落各處。

我被要求將另一個準備好的模塊引入最後運行的主模塊。

我的問題是「有沒有辦法保證這個新的就緒區塊會最後運行?」。我的想法是,如果我把它放在Master網頁的最底層,那麼它可以做到,但我似乎無法讓自己相信這是確定的。

+3

據我瞭解它是如何工作的,確保它在頁面上的最後應該是足夠的。 –

+0

由於網頁是基於Master和MVC視圖在服務器上「組成」的,我可以保證將$(document).ready()放在主文件的最後將會有效嗎? – wcm

回答

5

這是jQuery的.add方法被調用,以您的$(document).ready()的回調推送到所有回調的列表:

add = function(args) { 
    var i, length, elem, type, actual; 
    for (i = 0, length = args.length; i < length; i++) { 
     elem = args[ i ]; 
     type = jQuery.type(elem); 
     if (type === "array") { 
      // Inspect recursively 
      add(elem); 
     } else if (type === "function") { 
      // Add if not in unique mode and callback is not in 
      if (!flags.unique || !self.has(elem)) { 
       list.push(elem); 
      } 
     } 
    } 
} 

來源:jQuery's callback

所以:是什麼,它基本上是正在推動所有list數組內部和事件觸發後的功能 - 按照相同的順序調用它們,並且如果您的功能最後被觸發 - 它將被最後調用。

要包括所有其他.js文件後,最後推它,你甚至可以在頭部聲明它 (只要確保有不低於任何其他$(document).ready()

+0

由於網頁是基於Master和MVC視圖在服務器上「組成」的,我可以保證將$(document).ready()放在主文件的最後,會有效嗎? – wcm

+0

順便說一句,感謝您解釋和顯示代碼。 – wcm

+0

@wcm我很確定你可以:) – Teneff

0

我想你可以在這裏做一個小動作。 ,因爲我不知道,應該適合您的解決方案的具體情況,我建議你通過

window.setTimeout(添加一個調用延遲到你這裏cuntion,以毫秒爲單位*延遲時間*);

我知道這不是那麼優雅,但這是我想到的,讓我知道如果這對你有幫助,謝謝。

1

這裏有一個竅門我使用。在母版頁,申報

var postReadyEvents = []; 

然後,在子頁面,當你有一點需要最後運行的代碼,做

postReadyEvents.push(function() { 
    ///your stuff - I usually use this to resize a grid or something. 
}); 

現在,在母版頁的$(document )。就緒(),做

for(var i = 0; i < postReadyEvents.length; i++) 
{ 
    postReadyEvents[i](); 
} 

當你有兩個子頁面及母版頁$(文件)。就緒(),子頁面運行第一和母版頁跑最後一棒。這種方法使您能夠控制何時運行某個代碼塊。

相關問題