2013-04-11 80 views
0

所以我有這個元素,我需要得到width()height(),但它一直返回0,但是當我在控制檯中輸入$('#lightingData').width()時,它給了我正確的值。我想我需要使用一些其他包裝功能,我試過$(document).ready(function() {...});$(window).load(function(){...});jQuery等待更長的時間,直到函數被調用

是否還有其他的包裝功能,它會等待更長的時間才能執行?

+0

對於靜態元素,窗口加載應該足夠綽綽有餘。你用javascript添加元素嗎? – 2013-04-11 17:49:03

+0

你可以發佈一個完整的例子和jsFiddle嗎? – j08691 2013-04-11 17:49:14

+0

向我們顯示您的代碼 – 2013-04-11 17:49:44

回答

2

如果#lightningData元素具有display:noneonload被觸發,你的代碼執行,widht()height()將返回0,您可以顯式調用元素.show()的尺寸檢查

$('#lightingData').show().width(); 
+0

這隻有在實際上在加載的時候這個元素被稱爲 – 2013-04-11 17:52:26

+0

是有用的。這是一個給定的。沒有任何東西的寬度不能大於0. – TheBrain 2013-04-11 17:53:18

+0

你也可以在最後立即調用'.hide()'來將元素恢復到以前的狀態。 – Ian 2013-04-11 17:58:47

2

的事情之一,前您可以嘗試在嘗試呼叫.width().height()之前明確等待該特定元素加載。

試試這個:

$('#lightingData').load(function() { 
    ...height and width manipulation here... 
    ...don't forget about scope... 
}); 

你應該把你這裏面$(document).ready(...),你會希望文檔至少知道什麼是$('#lightingData')。因爲你得到0heightwidth而不是錯誤,我可以假設它們至少在調用方法之前找到。


UPDATE

每通過@Ian添加的評論,我想指出的是,這隻能對某些類型的元素(URL,內部框架,圖片/媒體等的工作 - 基本上什麼需要加載其內容)。我不打算更新代碼,因爲如果您將它用於其中一種元素,我上面的內容是正確的,如果您將它用於另一種元素,將會很愚蠢。如果你正在使用它,你只需要添加一個條件/過濾器(根據你的實現),以確定這個代碼是否應該綁定到該特定元素。

+0

爲什麼你在另一個包裝jQuery對象? – Ian 2013-04-11 17:57:41

+0

@Ian - 哈哈,這是一個錯誤,謝謝!我想最初我會打字選擇器,但後來發現我的感覺,並與複製意大利麪。粉筆另一個出於原因要小心複製粘貼! – 2013-04-11 18:01:01

+0

另外,檢查'$(window).on(「load」,function(){});'的內部應該綽綽有餘,因爲所有圖像都會加載 - 那麼您不需要'load'事件的形象。問題更可能是該元素被隱藏,無法計算寬度/高度。 – Ian 2013-04-11 18:01:12

0

如果你是100%肯定的寬度仍然是0在$(文件)點。就緒()

試試這個:

$(function() { 
    $('#lightingData').show(function(e) { 
     var width = $(this).width(); 
     //do something 
    }); 
}); 

或者,一些愚蠢的事,但會爲工作90%的情況下:

$(function() { 
    setInterval(function() { 
     var width = $('#lightingData').width(); 
     //do something 
    }, 1000); 
}); 

這一個將後$(文件)。就緒延遲動作1秒()。

沒有確切的情況很難給出指定的解決方案。