2013-04-16 64 views
2

我需要根據另一個元素的高度來設置元素的高度。比方說,當這個元素完成渲染時,它的高度是490px。如何在元素完成渲染後立即運行函數?

如果我在$(document).ready()的函數開頭查詢其他元素的高度,則返回432px。

如果我查詢setTimeout(function, 100)內的其他元素的高度,則返回大約475px。

如果我碰到setTimeout高達150左右,元素完成渲染,我得到190.但顯然我不能指望這一點。

如果可能的話,我不想等整個頁面完成加載;我只想等待這個元素。

似乎load事件應該可以在任意元素上工作,但據我所知,在瀏覽器中或至少在Chrome中未實現。

編輯:該元素不是圖像和(幾乎肯定)沒有圖像將永遠在元素內。這只是一個<div>與其他一些<div> s和<p> s和東西在裏面。在應用CSS的過程中,高度顯然會被查詢。代碼示例即將出版。

編輯2Here's a fiddle被黑掉了我的網站。 (請原諒可怕的標記;我還沒有清理Drupal的輸出。)小提琴並沒有表現出我試圖糾正的不良行爲,但是,因爲整個片段在Javascript的相關部分之前呈現跑。

有沒有辦法做到這一點,或者我堅持window.onload

+2

並且那是什麼元素?一個圖像 ? –

+2

你能告訴我們你的代碼嗎?最好在一個jsFiddle? – Leng

+0

@Mhamhammad是的,或者可能元素正在擴展以適合加載圖像? – Leng

回答

0

您至少需要使用$(window).load(),因爲您需要等待可能影響頁面元素尺寸的圖像和CSS表格等其他資源。

load()也可以在圖像上工作。您應該能夠在不需要setTimeout的情況下正確完成任務。

http://api.jquery.com/load-event/包含一個通知,它不能可靠地爲圖像工作。

+2

'.load'從jQuery 1.8開始已棄用,所以不推薦使用。 –

+0

然後使用'.on(「load」,..)'。 http://api.jquery.com/category/deprecated/deprecated-1.8/這個方法是'.on('load',handler)'._ – Halcyon

+1

的一個快捷方式,如果這是最好的,但它可能會有幫助,如果你在答案中改變它。 –

2

你可以做這樣的事情:

<img src="myImage.gif" onload="loadImage()"> 
+5

不是每個元素都是圖像 – Ejaz

+0

@ejay需要渲染的事物不會瞬間(或幾乎是瞬間)發生,通常是圖像。他沒有指定,但加載圖像延遲很常見。這不適用於div,因爲div是瞬間加載的。它們內部的內容可能不是,但如果你正在用函數填充div內的內容,那麼你應該檢查內容是否加載了其他函數。 –

+0

他在那個容器裏面有多個圖像呢? – Ejaz

相關問題