2012-02-22 16 views
10

CSS overflow: scroll;'u verdiğim bir öğede. Şimdi jQuery'de orijinal yüksekliğe sahip olmak istiyorum (tüm alt öğelerin yüksekliğini içeren). Bu öğenin altındaki çocuklar dinamik olarak değişiyor. Kaydırma olayında yükseklik istiyorum.Bir öğenin scrollheight öğesi tanımsız değer verir

$("#container").scroll(function(e) { 
    scrollAll(); 
}); 

function scrollAll(){ 
    var elemHeight = $("#container").scrollHeight; 
    var scrollHeight = $("#scrollbars").scrollHeight; 
    var ratio = elemHeight/scrollHeight; 

    $("#outup").html(elemHeight +" and "+ scrollHeight +" ratio "+ ratio +" = "+ ($("#container").scrollTop())); 
} 

Sayı: İşte kod O scrollHeight is undefined hata atar. Sorun nedir?

cevap

34

jQuery hiçbir scrollHeight yoktur - bu scrollTop() var: Alternatif

var elemHeight = $("#container").scrollTop(); 
var scrollHeight = $("#scrollbars").scrollTop(); 

Eğer yerli scrollHeight özelliğini kullanmak istiyorsanız, bu gibi doğrudan jQuery nesnesi DOM öğesine erişmek gerekir:

var elemHeight = $("#container")[0].scrollHeight; 
var scrollHeight = $("#scrollbars")[0].scrollHeight; 
+0

Geçtiğimiz günlerde, http://stackoverflow.com/questions/8100099/checking-for-scrollheight-of-an-element-sometimes-returning-0 –

+0

Artık işe yarıyor, bana ne olduğunu bildirir misiniz? $ ("# container") [0] ve $ ("# container") arasındaki farktır. –

+6

'$ (" # container ")' jQuery nesnesine sarılmış öğeyi döndürür, '$ (" # container ") [0]', DOM öğesinin kendisini döndürür. –

10

Jquery 1.6 veya üzerini kullanıyorsanız, değere erişmek için prop kullanın.

$("#container").prop('scrollHeight') 

Önceki sürümler, attr değerini almayıp post 1.6 değerini almak için kullanılır.

İlgili konular