将值推送到 jquery 中的数组

新手上路,请多包涵

我有项目清单 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” 我第二次添加了“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”

似乎它将最新版本附加到所有数据

请指教 。谢谢

原文由 prime 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 264
2 个回答

您需要在点击处理程序中声明数据,如果它被声明为全局变量,您基本上总是在修改并将相同的数据对象添加到数组中:

 var quotations = [];

$("#addquotation").click(function () {
        debugger;
        var data = {};
        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);
)};

原文由 HaukurHaf 发布,翻译遵循 CC BY-SA 3.0 许可协议

自从您在单击处理程序之外声明 data 以来,您每次都在推送相同的对象引用。

更改自:

 var data={};
$("#addquotation").click(function () {

$("#addquotation").click(function () {
     var data={};// declare local variable

原文由 charlietfl 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题