2013-03-19 84 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