2012-02-22 4 views
10

私がCSS overflow: scroll;を与えた要素で。今はjQueryで元の高さ(すべての子要素の高さを含む)にしたいと思います。この要素の下の子どもたちは動的に変化しています。私はスクロールイベントの高さを持っていたい。要素のscrollheightは、定義されていない値を与えます

$("#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())); 
} 

問題:: はここのコードです。これは、scrollHeight is undefinedエラーがスローされます。どうしましたか?

答えて

34

のjQueryにはscrollHeightはありません - それはscrollTop()です:また

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

あなたはネイティブscrollHeightプロパティを使用したい場合、あなたはこのように、直接jQueryオブジェクトにDOM要素にアクセスする必要があります。

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

http://stackoverflow.com/questions/8100099/checking-for-scrollheight-of-an-element-sometimes-returning-0 –

+0

偉大な仕事は今、私に何を知らせてくれますか? $( "#container")[0]と$( "#container")の違いです。 –

+6

'$("#container ")'は、jQueryオブジェクトにラップされた要素を返します。 '$(" container ")[0]'はDOM要素自体を返します。 –

10

Jquery 1.6以上を使用している場合は、propを使用して値にアクセスしてください。

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

以前のバージョンではattrから値を取得していましたが、post 1.6では使用できませんでした。

関連する問題