对象数组被最后一个对象覆盖

时间:2017-08-09 20:21:58

标签: javascript jquery

我正在加载这个对象数组:

$(document).ready(function () {
  $("<div></div>").load("/Stats/Contents #stats", function () {
    statcount = $(".list-group-item", this).length;

    for (var j = 0; j < statcount; j++) {
      statList.push(stat);
    }

    for (var i = 0; i < statcount; i++) {
      statList[i].statId = document.getElementById("statId-" + (i + 1) + "").value;
      statList[i].productDescription = document.getElementById("productType-" + (i + 1) + "").value;
      statList[i].lastMeasuredInventoryAmount = document.getElementById("statLastMeasureAmount-" + (i + 1) + "").value;
    }
  )}
)}

....等等 然后我得到更改的值并保存它们,但是,在ajax post调用中,所有数组对象都是相同的(最后一个已分配),看起来它们被覆盖了。 有任何想法吗?我看到了这些延迟/承诺类型的代码,但不确定是否有更简单的方法。 感谢。

1 个答案:

答案 0 :(得分:0)

听起来你接受了statList数组,然后将其推送到服务器,并进行相应的更改。您是否考虑过切换它并将结果从标记中取出并在保存点构建阵列,而不是构建和维护这样的列表?

$("btnSave").on("click", function(e) {
   var data = [];
   $(".list-group-item").each(function() {
     data.push({
       statId: $(this).find(".statid").val(),
       .
       .
     })
   });

您不需要为每个元素提供ID(但可以),因为我的示例使用CSS类来查找当前列表项中的元素。另外,如果这些是输入,您可以更有效地从根元素序列化它们......