2012-11-21 62 views
5

在jQuery的ready事件邏輯:爲什麼jQuery的觸發ready事件異步

// Catch cases where $(document).ready() is called after the 
// browser event has already occurred. 
if (document.readyState === "complete") { 
    // Handle it asynchronously to allow scripts the opportunity to delay ready 
    return setTimeout(jQuery.ready, 1); 
} 

你能解釋一下評論:「它處理異步允許腳本延遲準備的機會」。

我不明白什麼腳本和爲什麼延遲準備

+0

我問自己同樣的問題幾次。 – gdoron

+0

這真的很有趣,我也 – johnny

+1

看來,IE瀏覽器_we're因爲這裏的readyState ===「完整」的過時的歌曲,這是不夠好,我們叫DOM已準備就緒,這是相關_ HTTP://錯誤。 jquery.com/ticket/12282#comment:15 – undefined

回答

6

如果準備好的回調函數(會觸發readyList)立即啓動,那麼一旦DOM準備好了holdReady函數,就無法保持它的執行。

jQuery.holdReady(hold)
描述:保留或釋放jQuery的ready事件的執行。

$ .holdReady()方法允許調用延遲jQuery的ready事件。

動態腳本加載器通常會使用此高級功能,即使DOM可能已準備就緒,但希望在允許發生即時事件之前加載其他JavaScript(如jQuery插件)。

這個方法必須在文檔的早期被調用,比如緊跟在jQuery腳本標籤之後。 ready事件已經觸發後調用此方法將不起作用。

+0

+1,良好的偵探工作 –

+0

嘿gdoron :),但'holdReady'不使用_readystate_ https://github.com/jquery/jquery/blob/master/src/core.js#L370似乎屬於線準備好事件的jQuery的內部處理,https://github.com/jquery/jquery/blob/master/src/core.js#L846 – undefined

+0

@undefined,這是正確的,它使用['readyWait'(https://開頭github.com/jquery/jquery/blob/master/src/core.js#L372)在ready回調中被檢查:['if(wait === true?--jQuery.readyWait:jQuery.isReady){返回;}'](https://github.com/jquery/jquery/blob/master/src/core.js#L382) – gdoron

0

它與$.holdReady()有關,它允許您延遲就緒事件。用例可能是你想在所有其他腳本運行之前做一些初始化工作。您可以延遲準備,直到完成初始化。

相關問題