0

こんにちは、次のように変数にアクセスしようとしました。

for(var k=0;k<resultSet.length;k++)
{
   alert(resultSet[k]);
   $.get('/api/TagsApi/ElementsTagsIntersect?ids='+resultSet[k], function (data) {
        testingarr = [];
        for (var i = 0; i < data.length; i++) {                    
            testingarr.push(data[i]["ID"]);
        }
        for (var w = 0; w <3; w++) {
             if (($.inArray(testingarr[w], selectedloc)) > -1) {
                    var str = "<input type='checkbox' name ='test[]' value='" + resultSet[k] + "'/>" + resultSet[k] + "</br>";
                    $('#childs').append(str);
                     alert(resultSet[k]);
                    break;
                }
        }
}, 'json');

最初のアラートは私が期待している正確な値を表示しますが、内側の for ループになると、アラートは未定義を返し、未定義の側面を持つチェックボックスを追加します..適切な初期化を使用していると思いますが、なぜそうするのか混乱しています?

4

1 に答える 1

1

その理由は、k値が変更されるため、内部関数が呼び出されるまでに、kはすでに と等しくなりresultSet.lengthます。全体を別の関数でラップしk、パラメーターとして渡して、元の変数では変更されない新しい変数にバインドできますk

for(var k=0;k<resultSet.length;k++)
{
  (function (result) {
    $.get('/api/TagsApi/ElementsTagsIntersect?ids='+result, function (data) {
      var testingarr = [];
      for (var i = 0; i < data.length; i++) {                    
        testingarr.push(data[i]["ID"]);
      }
      for (var w = 0; w <3; w++) {
        if (($.inArray(testingarr[w], selectedloc)) > -1) {
          var str = "<input type='checkbox' name ='test[]' value='" + result + "'/>" + result + "</br>";
          $('#childs').append(str);
          break;
        }
      }
    }, 'json');
  })(resultSet[k]);
}
于 2013-03-19T19:50:32.573 に答える