我使用一个脚本从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/2GB/80GB/DVD/14"/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')">
答案 0 :(得分:0)
你有一个按钮,在点击时调用(a)buy()。但是你也在.actionbutton上绑定了一个click事件处理程序(b)。问题是这些事件是异步发生的。由于(a)是一个ajax调用,它应该花费比(b)更长的时间,因此(b)没有&#34; retailerData&#34;中的数据。
您可以为两者使用一个处理程序,而不是绑定2个单击事件处理程序。例如,buy()可以加载数据,然后其回调函数将负责呈现购物车。