2011-02-16 58 views
6

在我正在處理的腳本中,我將反饋表單的標記附加到主體,然後使用jQuery將該元素(DIV)集中在屏幕上。在下面的代碼示例中,form_code包含我的表單標記。爲#feedback_form定義的CSS樣式明確定義了一個寬度。但是,追加後立即調用的width()的計算計算錯誤,返回的尺寸幾乎等於頁面的整個寬度。追加後馬上DIV寬度計算錯誤?

如果我用控制檯警告寬度,甚至幾秒鐘後,它會正確計算。從來沒有遇到過這個問題,有人可以對此有所瞭解嗎?

jQuery('body').append(form_code); 
alert(jQuery("#feedback_form").css("width")); 

回答

18

您的Javascript代碼運行在與呈現HTML的線程不同的線程中。如果您在添加新代碼後立即查詢寬度,則渲染線程將沒有時間重新佈置頁面,以便獲得舊的或可能的中間寬度。

我不知道,如果是這樣的較新的瀏覽器,但肯定是舊的是合作式多任務處理這樣的頁面不會更新,直到您明確暫停,以便它更新的情況。

如果使用下面的代碼,你會發現它的作品,因爲零秒的停頓實際上允許在瀏覽器來處理重新呈現事件。

function show_width() { 
    alert(jQuery("#feedback_form").css("width")); 
} 
setTimeout(show_width, 0); 
+0

有趣。這工作,謝謝:P – Mike 2011-02-16 15:03:41

0

你打算怎麼做?您的代碼將元素添加到DOM,這需要時間。你是否試圖根據寬度等進行處理?在添加form_code之後?