2017-02-21 5 views
1

入力値を配列に格納したいと考えています。入力値が配列に格納されないのはなぜですか?

入力をクリックすると入力値が得られ、vals配列に挿入されます。

私はコンソールのログですが、私が入力をクリックするたびに、最後の入力値を押すだけです。

なぜですか?あなたの配列が故に関数にローカルなので、あなたのコードは、最後の値だけが表示されている理由がある一度だけ

var input = document.getElementById("input"); 
var vals = []; 
input.addEventListener("keyup", function(e) { 
    var val = e.target.value; 


    if (e.which == 13) { 

    vals.push(val); 
    input.value = " "; 
    console.log(vals); 

    } 

}, false); 
+2

の外ヴァルス配列を宣言します。そのリスナから移動してください。 – str

答えて

2

をあなたの配列を初期化する必要が

JSFIDDLE

var input = document.getElementById("input"); 

input.addEventListener("keyup", function(e) { 
    var val = e.target.value; 
    var vals = []; 

    if (e.which == 13) { 

    vals.push(val); 
    input.value = " "; 
    console.log(vals); 

    } 

}, false); 
1

その機能が有効範囲内にある間のみ存在します。むしろ、それをグローバルにすると、複数の要素を配列にプッシュして後でアクセスすることができます。

var vals = []; //make this global 

var input = document.getElementById("input"); 

input.addEventListener("keyup", function(e) { 
    var val = e.target.value; 
    if (e.which == 13) { 

    vals.push(val); 
    input.value = " "; 
    console.log(vals); 

    } 

}, false); 
1

あなたは `-宣言を再vals`毎回` keyup`リスナーが実行されているので、イベントリスナー

var input = document.getElementById("input"); 
var vals = []; 

input.addEventListener("keyup", function(e) { 
    var val = e.target.value; 

    if (e.which == 13) { 

     vals.push(val); 
     input.value = " "; 
     console.log(vals); 

    } 

}, false); 
関連する問題