2017-08-09 11 views
-1

最後のオブジェクトによって上書きされます:その後、私はアヤックスでは、しかし、変更された値を取得し、それらを保存Object配列が、私は、オブジェクトのこの配列がロードされている

$(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

未知の構造のデータを取得し、未知のマークアップに適用する関数を表示しています。 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(), 
     . 
     . 
    }) 
    }); 

あなたは私のサンプルは、現在のリスト項目内の要素を見つけるために、CSSクラスを使用して、すべての要素にIDを与える必要があります(ただしでし)ではないでしょう。さらに、これらが入力であれば、ルート要素からより効率的にシリアル化できます。

+0

こんにちはブライアン - はい、私はそれを行うことができます - しかし、要件は、元のデータと編集されたデータの両方を投稿と一緒に送ることです。だからこそ私は最初の読み込み時にオリジナルをキャプチャして保持する必要があります。 –

+0

また、idはstatid-1、statid-2のように動的に生成されるため、動的配列とプッシュが必要です。そして彼らはデータベースから来ていますが、編集可能なものもあります。 –

関連する問題