2012-06-20 16 views
13

Önemsiz bir soru gibi gözükebilir ama jQuery kullanırken bir sorunla karşılaşıyorum. Zaten bir elemanın yüksekliğini almayı denediğimde, daima sıfır verilir. Ben yükseklik kontrolü etrafında setTimeout() ile bir gecikme kodu koyarsanızjquery .se ve öğenin boyu

$(function() { 
    $('#my-elem').height() // Always gives me zero. 
}); 

(diyelim .5s arasında) ardından yüksekliği doğru bana geri bildirilir. Sanırım bunun nedeni, stillerin henüz uygulanamayacak bir şansı olmadı mı?

Bu problemi bulduğum tek çözüm, elemanın yüksekliğini sıfırlamak için bir aralık kullanmaktır; bu, sıfır olmayana kadardır, ancak bu bana aşırı gelir. Daha iyi bir yolu var mı?

+0

# my-elem bir div, span, img veya nedir –

+0

Öğe gizli mi ve sonra gösteriliyor mu? Docready'den biraz daha geç bir zamanda ateş eden $ (window) .load() 'etkinliğiyle deneyin. – elclanrs

+0

Bize mümkünse HTML'yi ve ayrıca bir klavyeyi gösterin. – Starx

cevap

21

HTML DOM Javascript üzerinden erişim için hazır document.ready olay sinyalleri ancak elemanları zaten kıldığı anlamına gelmez.

Aslında, bu ready arkasında tümü var: Eğer yükleme bitirmek için sayfanın beklemek zorunda kalmadan belgenin HTML DOM manipüle başlamak için bir araç. document.ready numaralı telefondan, öğelerinizin sayfada henüz görüntülenmediğini varsaymak güvenli.

Şimdi, bu bir uyarı ile geliyor: öğeler henüz oluşturulmamışsa, tarayıcı/Javascript çözme yüksekliğinin ne olduğunu nasıl bilebilir? .height(), bundan dolayı document.ready numaralı telefondan sıfır verebilir. Bu, kutu boyutlarının düzeninden çıkarılmasıyla ilgili olarak ready yerine load yerine kadar beklemek en iyisidir.

+0

Sanırım zamanın çoğunu (eğer her seferinde değil) _ _on nadir durumlar olarak okumanız gerekir_ –

+0

Deneyimden bahsediyordum, ama daha jenerik olduğunu tekrar söyleyeyim. –

İlgili konular