2013-10-09 205 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); 

});