2017-08-09 58 views
-1

我有这样的对象数组装载:对象数组被通过的最后一个对象覆盖

$(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; 
    } 
)} 
)} 

....等等 后来我得到了改变的值,并将其保存,但在阿贾克斯所有的数组对象都是相同的(分配的最后一个),看起来像被覆盖。 任何想法?我看到这些延迟/承诺类型的代码,但不知道是否有更简单的方法。 谢谢。

+2

从哪里来的筒仓来?这是完整的代码吗? –

+2

您向我们展示了一个函数,它将一些未知结构的数据应用于某些标记,也是未知的。不知道这两者,你的问题是毫无意义的。 –

+0

没有HTML很难说,但我的猜测是所有的'statId-','productType-'和'statLastMeasureAmount-DOM元素都有完全相同的ID,这就解释了为什么JS总是选择最后一个。 – masterfloda

回答

0

这听起来像你采取statList数组,然后推它到服务器,与任何相应的变化。与其构建和维护这样的列表,您是否想过切换它,只是将结果从标记中提取出来并在保存点构建阵列?

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

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

+0

嗨,布赖恩 - 是的,我可以做到这一点 - 但是,我的要求是将原始数据和编辑后的数据发送回帖子。这就是为什么我需要在第一次加载时捕获并保留原件。 –

+0

此外,ID是动态生成的,如statid-1,statid-2 - 因此需要动态数组和推送。他们来自数据库,但有些是可编辑的。 –