2012-01-18 41 views
4

我有很多在$(document).ready()上生成的HTML。我有一個簡單的窗口系統。但不僅在$(document).ready()上生成 - 還有一些HTML元素(不同的JS文件將東西放入$(document).ready())。我想在調用$(document).ready()之後生成我的窗口系統。那麼在$(document).ready()中註冊的所有代碼完成後,如何處理要調用的函數呢?

+2

那是一個很大的$(文件)。準備()! ;-) – janhartmann 2012-01-18 13:11:25

+0

所以,你想要一個.ready()爲你的document.ready()?這不是jQuery的工作原理 - 與PHP上的WordPress不同,由於JavaScript基於事件的模型,jQuery無法「知道」您已經完成了所有已放入ready()函數的代碼。所以,在document.ready()之後沒有調用事件。您需要創建並等待事件自行完成,或者使用window.load()。 – Cole 2012-01-18 13:15:28

回答

6

還有另外一個事件在稍後被解僱。它是$(window).load();在加載所有資源後觸發。

但是,也許你想這樣的:

function loadWindowSystem(){ 
    // load window system here 
} 

$(document).ready(function(){ 
    // do some html stuff here 

    loadWindowSystem(); 
}) 

這樣你就可以在單獨的功能代碼。

+0

注意:window.load在加載所有資源時觸發,不僅僅是圖像 – 2012-01-18 13:15:59

+0

這意味着我需要在每個使用$(document).ready(「」)生成的文檔中調用'loadWindowSystem()'來生成HTML ...而且.js的加載將如此重要... – myWallJSON 2012-01-18 13:17:13

+0

感謝Didier,我在我的答案中改變了它。 – timing 2012-01-18 13:24:35

0

沒有什麼該功能後,所以如果你有一些Ajax裝載機,只認爲你能做的就是等待所有這些,然後開始渲染

修改,但我不知道爲什麼你不只是structuralize代碼消除這一點。

0

$(document).ready()在DOM完成加載後立即調用。 pageLoad()在0計時器上被調用,但要小心它在每次部分回發後運行。

編輯:添加了旁註 - 只有在使用ASP.NET時纔會計數,所提及的pageLoad功能與jQuery是分開的。查看更多信息Here

2

如果你想要的東西解僱所有$(document).ready()電話之後,你可以在頁面中把這個任意位置:

$(document).ready(function() { 
    setTimeout(function() { 
     // call your code here that you want to run after all $(document).ready() calls have run 
    }, 1); 
}); 

這將得到與其他所有的document.ready電話叫一起,但它會設置一個短暫的超時,在所有其他document.ready調用完成後執行。

3

我一般不主張使用setTimeout,但你可以建立在@ jfriend00的回答之上創造一個更加抽象的方法:

$(document).ready(function() { 
    setTimeout(function() { 
     $(document).trigger('afterready'); 
    }, 1); 
}); 

$(document).bind('afterready', function() { 
    // call your code here that you want to run after all $(document).ready() calls have run 
}); 
6
$(window).load(function(){ 
    //some code after ready 
    }); 
+1

這裏有很多談話圍繞着答案。這是所問問題的確切答案。 – JackArbiter 2015-03-04 02:44:37

相關問題