Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/480.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将值推送到jquery中的数组_Javascript_Jquery_Arrays_Asp.net Mvc_List - Fatal编程技术网

Javascript 将值推送到jquery中的数组

Javascript 将值推送到jquery中的数组,javascript,jquery,arrays,asp.net-mvc,list,Javascript,Jquery,Arrays,Asp.net Mvc,List,我有项目列表数据和空数组报价: var data = {}; var quotations = []; 我想用数据值填充quotes,每次我添加新数据时,它都会成功添加,但所有数据值都会得到最后一个值 例如: $("#addquotation").click(function () { debugger; var itemname = $("#itemname").val(); var cost =parseFloat( $("#c

我有项目列表
数据和空数组报价

   var data = {};
   var quotations = [];
我想用数据值填充
quotes
,每次我添加新数据时,它都会成功添加,但所有数据值都会得到最后一个值

例如:

 $("#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,TestNotes2016-02-05”

调试时,我获取的数据如下所示:

obj(0):“测试2,45.2,测试说明2016-02-05” obj(1):“测试2,45.2,测试说明2016-02-05”

似乎它将最后一个版本附加到所有数据中


请给我一些建议。谢谢

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

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);
)};

自从在click处理程序外部声明了
data
之后,每次都推送相同的对象引用

更改为:

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


问题在于
data
是一个全局变量,您将对
data
的引用添加到
quotes

当第一个值被推送到
quotes
时,
data
quotes[0]
引用同一对象。下面是正在发生的事情的一个例子:

var a = {num: 1};
var b = a;
b.num = 2;
console.log(a.num); // prints 2
将对象推送到数组时也会发生同样的情况<代码>报价单不包含
数据的副本
,它包含对
数据的引用
,因此修改
数据
也会修改
报价单
。要解决此问题,引用的每个元素必须引用不同的数据对象。这可以通过在函数内部而不是外部定义
数据来实现

替换

var data = {};
$("#addquotation").click(function() {
    // populate data, push to quotations
});

var data = {};
$("#addquotation").click(function() {
    // populate data, push to quotations
});
$("#addquotation").click(function() {
    var data = {};
    // populate data, push to quotations
});