2012-03-01 12 views
3

私はこれを得ることができません。offset()。戻るウィンドウオブジェクト

私は(オフセットを取得する必要があります)jQueryオブジェクトからトップ、これは私のコード

parentLi = $(element).parents("li"); 
parentLiOffset = parentLi.offset(); 
top = parentLiOffset.top; 
left = parentLiOffset.left; 
console.log(parentLiOffset); 
console.log(top); 
console.log(left); 

であり、これはコンソールが戻って与えるものである:。

Object { top=208, left=311} 
Window /demo/ 
311 

あなたが見ることができるように、I 「トップ」の価値を得ることはできません。私はそれが何か違いがあれば、firefoxのusinfです。

ありがとうございます!

+1

サイドノートとして:これを代わりに実行してください: 'var parentLi = $(element).closest( 'li');' –

答えて

12

問題は、変数を宣言するのにvarキーワードを使用していないことです。 topは、windowのプロパティです(読み取り専用のプロパティで、コードで上書きされません)。代わりに、次の操作を行います。leftwindowのプロパティではありませんので、

var top = parentLiOffset.top; 
var left = parentLiOffset.left; 

leftは、varなしで動作します。コードでという名前のプロパティが作成され、leftという名前が付けられ、正しい値が割り当てられます。ただし、グローバルスコープに変数が漏れるのを防ぐには、常にvarキーワードを使用することをお勧めします。

topプロパティは、「ウィンドウ階層の一番上のウィンドウへの参照を返します」。

+0

私はそれがこのようなものであることを知っていた... ありがとう!それは速く正確でした! – monxas

+0

問題はありません、私は助けることができてうれしい:) –

+0

しかし、その唯一の仕事は、FFです。そのクロムのオフセットを返しません –

1

これらの変数をローカルに宣言するのを忘れました。

は、この操作を行います。事前に変数を宣言していない場合は

var top = ... 
var left = ... 

、彼らはグローバルプロパティとして扱われます。この場合、読み取り専用のwindow.topプロパティに書き込もうとしています。

変数を事前に宣言していないと、予期しない結果が発生する可能性があるため、危険です。

+0

あなたも釘付けになりました。 – monxas

1

これは唯一のコードか、topとconsol.logの定義の間に何かがあるかどうかです。

そして、変数を宣言するときに変数の前に "var"を書き込むのは良いことです。