Jquery Click事件在第二次单击时触发,但不是第一次触发

时间:2016-06-22 07:43:35

标签: javascript jquery

我使用一个脚本从javascript对象获取一些产品数据,并将其添加到分配给.click函数的篮子中。

如果我第一次点击按钮添加产品​​,则没有任何反应。如果我然后点击另一个产品的购买按钮,它会将第一个产品添加到购物篮中,然后从那里开始工作,但缺少一个产品。

如果我在pageload而不是.click上运行脚本,那么它会正确显示所有产品。

为什么脚本不会在第一个.click上触发?

工作小提琴:https://jsfiddle.net/hszxbmrx/13/

脚本:

$(document).ready(function(){
    $(".actionbutton").on("click", function(e) {
        $.each(retailerData.order.items,function(i,v){//get the item 
            var div = $('<div class="cartcont">')
            div.append('</br>'+'<img class="cartcont" src="' + v.imageURI +'" /><span class="art">' + v.label + '</span></br><span class="part">' + v.artno + '</span><span class="basketqty">' + v.qty + '</span><span class="price">'+ v.price + '</span>')
            $('div#headercart ul.acdropdown .carttable').append(div)
        })

        var nameDiv = document.createElement("td");
        nameDiv.id = 'totalIncExa';
        var text3 = document.createTextNode(retailerData.order.orderSum);
        nameDiv.appendChild(text3)
        document.body.appendChild(nameDiv);
        $("td#totalIncExa").appendTo("tr.ordersum");

        var nameDiv = document.createElement("td");
        nameDiv.id = 'vatTotala';
        var text3 = document.createTextNode(retailerData.order.orderVat);
        nameDiv.appendChild(text3)
        document.body.appendChild(nameDiv);
        $("td#vatTotala").appendTo("tr.ordervat");

        var nameDiv = document.createElement("td");
        nameDiv.id = 'orderTotala';
        var text3 = document.createTextNode(retailerData.order.orderSum);
        nameDiv.appendChild(text3)
        document.body.appendChild(nameDiv);
        $("td#orderTotala").appendTo("tr.ordersumtotal");
    });
});

Javascript对象:

var retailerData = {
"del": {
    "zip": "",
    "city": ""
},
"user": {
    "country": "",
    "phone": "",
    "nbrOrders": 0,
    "isPunchOut": false,
    "name": "",
    "salesPerson": "",
    "customerNo": "",
    "email": ""
},
"order": {
    "shippingSum": 0.0,
    "shippingFormatSum": "\u20AC0",
    "orderno": "0",
    "orderFormatSum": "\u20AC130",
    "voucher": "",
    "orderFormatVat": "\u20AC27,30",
    "currencySymbol": "\u20AC",
    "currency": "EUR",
    "orderVat": 27.3,
    "orderSum": 130.0,
    "items": [{
        "imageURI": "\/imgr\/8c82380c-65f5-43aa-83ad-fae1215b5b39\/70\/70",
        "qtyAvail": 7,
        "price": 130.0,
        "qty": 1,
        "artno": "D630-T7100-GE-REF",
        "vat": 27.3,
        "formatVat": "\u20AC27,30",
        "id": "52307",
        "label": "D630 C2D-T7100&#x2F;2GB&#x2F;80GB&#x2F;DVD&#x2F;14&#34;&#x2F;NO COA WLAN",
        "category": "Computers - Notebooks",
        "formatPrice": "\u20AC130",
        "manufacturer": "Dell"
    }]
  }
 }

按钮:

<input type="button" id="pl52307buy" class="actionbutton" value="Köp" onclick="buy(this, 52307, null, 'pl52307qty',null, '/ajax/buy')">

1 个答案:

答案 0 :(得分:0)

你有一个按钮,在点击时调用(a)buy()。但是你也在.actionbutton上绑定了一个click事件处理程序(b)。问题是这些事件是异步发生的。由于(a)是一个ajax调用,它应该花费比(b)更长的时间,因此(b)没有&#34; retailerData&#34;中的数据。

您可以为两者使用一个处理程序,而不是绑定2个单击事件处理程序。例如,buy()可以加载数据,然后其回调函数将负责呈现购物车。