jQuery array.push()出错

时间:2018-08-01 16:24:36

标签: jquery arrays

我有两个数组,分别是temp和final;
当我单击文件类型输入时,input.files将推送到临时文件,然后如果我按确认按钮:
1)最终将等于temp,
2)temp = []
现在,final具有临时对象,而temp将是一个空数组。
但是,当temp.push(input.files)发生时,最终数组将被同时推送,
下面只是一个演示,是否有可能导致结果推送到final?:

var temp = [];
var final = [];

temp = final;
$(document).on('click',function(evt){
  var currentTarget = $(evt.currentTarget);
  var result = currentTarget[0].files;
   for (var x = 0; x < result.length; x++) {
     temp.push(result);                //when result push to temp,it push to final also
  }
});

$(document).on('click', '.confirmButton', function () {
  final = temp;
  temp = [];
});

1 个答案:

答案 0 :(得分:0)

  1. 您不应将Final关键字用作变量,这是该语言的reserved keyword
  2. 在第三条语句中,您将final变量引用为temp,因此每个变量中的任何更新都将指向相同的数据。

理想情况下,您的代码应类似于:

var temp = [];
var finalData = [];
$("#fileUploaded").on('change', function(evt) {
  var currentTarget = $(evt.currentTarget);
  var result = currentTarget[0].files;
  for (var x = 0; x < result.length; x++) {
    temp.push(result);
  }
});

$(document).on('click', '.confirmButton', function () {
  finalData = temp;
  temp = [];
  console.log(finalData);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" multiple id="fileUploaded" />

<button class="confirmButton">confirm</button>