为什么我的输入值不存储在数组中?

时间:2017-02-21 12:39:22

标签: javascript arrays

我想将输入值存储到数组中。

当我点击回车时,我得到输入值并推入vals数组。

然后我控制日志,但每当我点击进入时,它只会推送最后一个输入值。

为什么?

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);

3 个答案:

答案 0 :(得分:2)

您的代码仅显示最后一个值的原因是因为您的数组是函数的本地数组,因此它仅在该函数在范围内时才存在。而是将其设置为全局,这样您就可以将多个元素推送到数组中,然后再访问它。

 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 :(得分:1)

您只需要初始化一次数组

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 :(得分: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);