2017-08-09 123 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 - 因此需要動態數組和推送。他們來自數據庫,但有些是可編輯的。 –

相關問題