2011-01-26 5 views
0

Uber Noobが、私は近くにいると思った。jQuery - 最初の関数の変数を別の関数の中で使用する必要がありますか?

var markers = $j('span.marker'); 

$j(markers).each(function() { //function to store original marker positions 
    var startOrigin = $j(this).css('margin-left'); 

}); 

$j("a.timeline-view").click(function() { //function to return markers to stored positions 
    $j(markers).each(function() { 

     $j(this).animate({ 
      marginLeft: startOrigin 
     }) 

    }); 
}); 

第2の関数はvarを見つけることができませんか?

答えて

1

私はjqueryのに

をその$ jのの==エイリアスを想定して、あなたの問題を解決するには、要素にバインドされた値を保存して、必要なときに.data('name')でそれを取得するためにjqueryの.data('name', val)を使用しています。

$j(markers).each(function(){ //function to store original marker positions 

     $j(this).data('startOrigin', $j(this).css('margin-left')); 

}); 

$j("a.timeline-view").click(function() { //function to return markers to stored positions 
    $j(markers).each(function(){ 
     var marker = $j(this); 
     marker.animate({marginLeft : marker.data('startOrigin') }) 
    });   
}); 

あなたのコードが動作しない理由を説明するにはjQueryのデータ

+0

また、単に 'markers.each'でも、すでにjQueryの選択であることを伝えてください。 – lonesomeday

+0

haaaaaamazing。データを調査します()。 – Adman

+0

も歓迎します。あなたが$(...)を実行するたびにjqueryオブジェクトをキャッシュすることについては覚えておいてください。$(...)を実行するたびに$(this)を複数回使用すると、一つのスコープは 'var el = $(this)'のような変数にキャッシュし、 '$(this)'の代わりに 'el'を使うのが良いです。他のセレクタを複数回使用する場合も同じです。常にキャッシュしてください!それはあなたのコードをもっと読みやすくする:)(私が意味するものを含むように編集された) –

1

を使用して詳細はチェックhttp://api.jquery.com/jQuery.data/ ...

JavaScriptで関数がスコープ内にあり

含むで宣言されたすべての変数またはその機能内で使用することができる。 varキーワードを使用すると、現在のスコープに変数が設定されます。あなたの例では、startOriginは最初の関数の範囲内にあるだけです。あなたが親スコープに入れた場合、あなたの例では、すべての機能は、その範囲でそれを持っています。しかし

var markers = $j('span.marker'); 
var startOrigin; // declare the variable in this scope 

markers.each(function() { //function to store original marker positions 
    startOrigin = $j(this).css('margin-left'); // use the parent scope 
}); 

$j("a.timeline-view").click(function() { //function to return markers to stored positions 
    markers.each(function() { 

     $j(this).animate({ 
      marginLeft: startOrigin // use parent scope 
     }) 

    }); 
}); 

注意を、この例では、種類のとにかく壊れていること。毎回startOriginを上書きして、マーカー全体をループしています。 TomTuがhis answerで言ったようにdataを使用すると、個々のDOM要素のデータを設定する必要があります。

+0

私は、分かりやすく感謝を参照してください。 – Adman

関連する問題