将对象添加到JS数组

时间:2014-06-10 09:51:02

标签: javascript jquery arrays

我正在尝试创建array objects$(".orderBtn").click(function(event){ //Show the order Box $(".order-alert").show(); event.preventDefault(); //Create the Array var productArray = []; //Get reference to the product clicked var stockCode = $(this).closest('li').find('.stock_code').html(); //Get reference to the quantity selected var quantity = $(this).closest('li').find('.order_amount').val(); var key = "stockCode"; var obj = { 'stockCode' : stockCode, 'quantity' : quantity }; productArray.push(obj); $.cookie('order_cookie', JSON.stringify(productArray), { expires: 1, path: '/' }); console.log(productArray); if(quantity == 0){ console.log("Quantity must be greater than 0") } ,其中包含与订单相关的两条信息:

  1. 产品库存代码
  2. 产品数量
  3. 目前我这样做:

    array

    我希望每次单击订单按钮时​​,新对象都会添加到现有对象的array,而只是输出{{1}}一个对象,对象I'我刚补充说。

    我有什么遗失的吗?

5 个答案:

答案 0 :(得分:4)

将函数外部的数组声明移动到全局范围内 在您的情况下,每次调用函数时都会创建一个新数组(函数范围),因此只生成一个结果。

阅读有关范围\提升的this

var productArray = [];
$(".orderBtn").click(function(event){

        //Show the order Box
        $(".order-alert").show();
        event.preventDefault();

        //Create the Array

        //Get reference to the product clicked
        var stockCode = $(this).closest('li').find('.stock_code').html();
        //Get reference to the quantity selected
        var quantity = $(this).closest('li').find('.order_amount').val();

        var key = "stockCode";
        var obj = {
            'stockCode' : stockCode,
            'quantity'  : quantity
        };

        productArray.push(obj);

        $.cookie('order_cookie', JSON.stringify(productArray), { expires: 1, path: '/' });

        console.log(productArray);

        if(quantity == 0){
            console.log("Quantity must be greater than 0")
        }

答案 1 :(得分:2)

声明为全局变量

 var productArray = [];
    $(".orderBtn").click(function(event){
    // do here 
    //productArray.push("anyObject"); 
    });

答案 2 :(得分:1)

每次单击按钮时,您都在重新创建/覆盖productArray。尝试将var productArray = []移动到点击处理程序之外

答案 3 :(得分:0)

不是这样,因为你的

var productArray = [];

位于设置cookie的函数内,因此它会重新定义,然后每次调用函数时都会添加一个元素。

您需要在函数外部定义productArray(作为全局变量?),以便保留其先前的值,并将新对象添加到其中

答案 4 :(得分:0)

使用var productArray = [];,您每次点击都会声明一个新阵列。将该行移动到click处理程序之外,代码应该开始工作。