对象数组被通过的最后一个对象覆盖
我有这样的对象数组装载:对象数组被通过的最后一个对象覆盖
$(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;
}
)}
)}
....等等 后来我得到了改变的值,并将其保存,但在阿贾克斯所有的数组对象都是相同的(分配的最后一个),看起来像被覆盖。 任何想法?我看到这些延迟/承诺类型的代码,但不知道是否有更简单的方法。 谢谢。
这听起来像你采取statList数组,然后推它到服务器,与任何相应的变化。与其构建和维护这样的列表,您是否想过切换它,只是将结果从标记中提取出来并在保存点构建阵列?
$("btnSave").on("click", function(e) {
var data = [];
$(".list-group-item").each(function() {
data.push({
statId: $(this).find(".statid").val(),
.
.
})
});
您不需要为每个元素提供一个ID(但可以),因为我的示例使用CSS类来查找当前列表项中的元素。此外,如果这些是输入,你可以更有效地从根元素序列化它们...
嗨,布赖恩 - 是的,我可以做到这一点 - 但是,我的要求是将原始数据和编辑后的数据发送回帖子。这就是为什么我需要在第一次加载时捕获并保留原件。 –
此外,ID是动态生成的,如statid-1,statid-2 - 因此需要动态数组和推送。他们来自数据库,但有些是可编辑的。 –
从哪里来的筒仓来?这是完整的代码吗? –
您向我们展示了一个函数,它将一些未知结构的数据应用于某些标记,也是未知的。不知道这两者,你的问题是毫无意义的。 –
没有HTML很难说,但我的猜测是所有的'statId-','productType-'和'statLastMeasureAmount-DOM元素都有完全相同的ID,这就解释了为什么JS总是选择最后一个。 – masterfloda