2013-10-09 139 views
1

我想遍历几个输入字段,然后添加到order阵列。变量超出范围

一旦each()完成,我想用order数组调用addTask函数。但。

当我通过控制台运行它跳入addTask(order),只得到1个结果

当我移动order阵列出它不知道它的功能是存在的。 什么是最好当each()完成得到这回范围。

// Start adding orders to display 
$("#btn-new-line").on('click', function(){ 
$("input:text").each(function(index, element){ 
    var elem = $(element); 
    var order = [] ; 
    order.push(elem.val()+ " "); 
}); 
addTask(order); //* unresolved variable * 
}); 
+3

你每次重新声明变量通过调用'VAR为了= [];',这是消灭你的结果。 –

+0

声明变量之前'.on'然后将它里面的价值 – JFK

+0

移动的'VAR命令宣布= [];'的'。每()' – devnull69

回答

2

每次循环都覆盖“订单”变量。

// Start adding orders to display 
$("#btn-new-line").on('click', function(){ 
    var order = [] ; 
    $("input:text").each(function(index, element){ 
     var elem = $(element); 
     order.push(elem.val()+ " "); 
    }); 
    addTask(order); //* unresolved variable * 
}); 
-3

订单范围限于回调,因为您在其中创建而不是扩展它。

$("#btn-new-line").on('click', function() { 
    $("input:text").each(function (index, element) { 
     var elem = $(element); 
     var order = []; 
     order.push(elem.val() + " "); 
     addTask(order); //* unresolved variable * 
    }); 
}); 
+0

之前,这有什么错我的答案? – Exception

+0

阅读其他的答案,你会看到 –

+1

阅读问题又来'一旦每()已经完成,然后我要打电话与array' – devnull69

0

声明这样说:

$("#btn-new-line").on('click', function(){ 
    var order = [] ; 
    $("input:text").each(function(index, element){ 
     var elem = $(element); 
     order.push(elem.val()+ " "); 
    }); 
    addTask(order); //* unresolved variable * 
}); 
0
// Start adding orders to display 
var order = [] ; 
$("#btn-new-line").on('click', function(){ 
$("input:text").each(function(index, element){ 
    var elem = $(element); 
    order.push(elem.val()+ " "); 
}); 
addTask(order); //* unresolved variable * 
}); 
+0

顺序这将工作addTask功能,但声明变量在全局空间,如果可能的话,这是要避免的。 – 2013-10-09 20:29:36

+0

如果它嵌套在一些其他的功能(我不知道),它不是在全球范围内;-) –

+0

没错,但无关紧要,因为你不知道,变量可以(并且可能应该)被点击内部声明无论如何。 – 2013-10-09 20:35:13

0

声明你order变量在点击处理程序:

// Start adding orders to display 
$("#btn-new-line").on('click', function(){ 
    var order = [] ; 

    $("input:text").each(function(index, element){ 
    var elem = $(element); 
    order.push(elem.val()+ " "); // order still accessible through the enclosing function. 
    }); 
    addTask(order); 

});