2010-06-21 50 views
4

我正在使用jQuery的加載函數在文檔準備就緒時呈現我的一些內容。如何等待jQuery的加載函數在執行回調函數之前呈現加載的內容

$(document).ready(function(){ 
    $('#header').load('header.html',function() { 
     //do call back function}); 
    $('#footer').load('footer.html'); 
}); 

我不希望我的回調函數,請求完成時執行,而是當加載的內容(或DOM?)已準備好進行操作。我怎樣才能做到這一點?

感謝

+1

是什麼讓你覺得DOM沒有準備好在你的'load()'回調中被操縱? jQuery在將響應內容放入目標容器後調用它*。 – Pointy 2010-06-21 15:27:08

+0

你已經這樣做了,你知道$(document).ready做了什麼嗎? – Prashanth 2010-06-21 15:35:24

+0

我在從header.html加載的新內容中使用jQuery的角功能。角功能不能正常工作,除非我在它之前添加一個警報,我認爲這是一個時間問題。如果它的計時問題是否有意義,當我嘗試操縱它時,內容沒有被完全加載? – aos37 2010-06-21 15:38:57

回答

2

我敢肯定,你看的窗口被加載後,而不是DOM做一些事情。

如果您有一些代碼依賴於讀取圖像等事物的高度和寬度,(文檔).ready將不起作用,因爲它在圖像加載之前運行。試圖在頁面上呈現RSS源時,我遇到過這個問題。

這是代碼做一些加載窗口後:

jQuery(window).load(function() { 
    //Do something after the window is loaded! 
}); 
1

從我瞭解這裏的問題是,回調得到儘快接收數據,而不是當瀏覽器有一個叫完成渲染。這是一個問題,如果你的回調依賴於樣式屬性作爲一個例子。

我的解決方案是在加載之前隱藏父節點,然後在稍微延遲之前添加,然後再次顯示,並在show方法上放置回調。

$('#header').hide().load('header.html').delay(1).show(0, function(){ 
    //callback statements 
}); 

所以這個工作,但不是防彈,因爲我們不知道的內容將採取究竟有多長渲染。

相關問題