アイテムのリストがありますdata and empty array quotations
:
var data = {};
var quotations = [];
quotations
にデータ値を入力します。新しいデータを追加するたびに、正常に追加されましたが、すべてのデータ値が最後の値を取得します。
例えば :
$("#addquotation").click(function () {
debugger;
var itemname = $("#itemname").val();
var cost =parseFloat( $("#cost").val());
var notes = $("#notes").val();
var date = $("#date").val();
data.Item = itemname;
data.Cost = cost;
data.Notes = notes;
data.Date = date;
quotations.Push(data);
)};
初めて追加する
「test、45、testnotes、2016-02-03」2回目に「test2,45.2、testnotes2,2016-02-05」を追加しました
デバッグすると、次のようなデータが得られます。
obj(0): "test2,45.2、testnotes2,2016-02-05" obj(1): "test2,45.2、testnotes2,2016-02-05"
それはすべてのデータに最後のバージョンを追加するようです
アドバイスを下さい 。ありがとう
問題は、data
がグローバル変数であり、data
への参照をquotations
に追加することです。
最初の値がquotations
にプッシュされると、data
とquotations[0]
は同じオブジェクトを参照します。これが何が起こっているかの例です:
var a = {num: 1};
var b = a;
b.num = 2;
console.log(a.num); // prints 2
オブジェクトが配列にプッシュされたときにも同じことが起こります。 quotations
にはdata
のコピーが含まれていません。data
への参照が含まれているため、data
を変更するとquotations
も変更されます。これを修正するには、quotations
の各要素が異なるデータオブジェクトを参照する必要があります。これは、関数の外側ではなく関数の内部でdata
を定義することで実現できます。
交換する
var data = {};
$("#addquotation").click(function() {
// populate data, Push to quotations
});
と
$("#addquotation").click(function() {
var data = {};
// populate data, Push to quotations
});