2012-01-23 7 views
1

ループ内で複数の匿名の非同期関数で別の変数の状態を保持:は、私はここにそれは行く、コードせずにこれを記述するための方法での損失によ

$('.colors').each(function() { 
    $.getJSON('my.json', function(data) { 
     $(this).css('color', data.color); 
    }); 
}); 

私はgetJSONコールバックのボディを参照したいです親(eachコールバック)スコープのthisの値。 thisはそれがgetJSONコールバックの外にあったものではありませんので、

このコードは、動作しません。変数に配置しようとしても、ループの繰り返しごとに1つずつではなく、すべてのコールバックで1つの変数しか共有されないため、機能しません。

どうすればこの問題を解決できますか?

答えて

1

私はこれを試してみたproxy

$('.colors').each(function() { 
    $.getJSON('my.json', $.proxy(function(data) { 
     $(this).css('color', data.color); 
    }, this)); 
}); 
+0

非常にきれいで、動作します! –

3

あなたが閉鎖でそれをキャプチャすることができます:

$('.colors').each(function() { 
    var $this = $(this); 
    $.getJSON('my.json', function(data) { 
     $this.css('color', data.color); 
    }); 
}); 

か:

$('.colors').each(function() { 
    $.getJSON(
     'my.json', 
     (function(element) { 
      return function(data) { 
       element.css('color', data.color); 
      }; 
     })(this) 
    ); 
}); 
+0

を見ているが、ヨッシー答えはjQueryのを使用していますそれだけで完璧です。とにかく+1。 –

関連する問題