2013-03-19 83 views
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'); 

,其中第一個警報顯示我所期待的精確值,但是當涉及到內部的循環,警報回報不確定,並增加了一個複選框未定義一邊呢..我想我正在使用正確的初始化,但困惑它爲什麼這樣做?

+0

不知道你的HTML或「的resultSet」的內容,它是不可能回答這個問題的。 – 2013-03-19 19:52:46

+1

@Diodeus:那我怎麼能回答它? =) – Claudiu 2013-03-19 19:58:24

回答

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]); 
} 
+0

什麼可以解決這個呢? – u2425 2013-03-19 19:51:58

+1

@ u2425:看我的編輯。還修正了indentation並在'testingarr'之前添加了'var' – Claudiu 2013-03-19 19:54:08