我正在尝试执行一些在单击特定链接时具有回调的代码。回调是再次单击链接,但在第二次传递时,该方法返回true以遵循正常行为。但由于某种原因,它不起作用?我使用clickedLink
来获得适当的范围。在事件回调中,this
指的是window
。
更新 为了更加清晰,我通常认为这不是一个最佳解决方案,但我使用Google的跟踪管理器来监控电子商务流量。我正在尝试确保将产品点击推送到他们的dataLayer,并使用他们的事件回调来恢复正常行为。更多信息:https://developers.google.com/tag-manager/enhanced-ecommerce#product-clicks
这是我根据以下答案更新的方法,但它仍然无效。
var shopCartBtnClicked = false;
var clickedLink;
jQuery('#pdp_add_cart, .add_to_cart_button').click(function(e) {
if (shopCartBtnClicked === true) {
shopCartBtnClicked = false; //I make it here just fine
} else {
e.preventDefault();
clickedLink = this;
var pdp = false;
if (mmProduct) {
//On detail page
mmProduct.qty = jQuery('input[name="quantity"]').val();
pdp = true;
} else {
//on a shopping page
mmProduct = findProductClicked(this);
mmProduct.qty = 1;
}
dataLayer.push({
'event': 'addToCart',
'ecommerce': {
'currencyCode': 'USD',
'add': {
'products': [{
'name': mmProduct.name,
'id': mmProduct.id,
'price': mmProduct.price,
'quantity': mmProduct.qty
}]
}
},
'eventCallback': function () {
//Are we on a product detail page with a form, or just a shopping page with a link?
if (pdp) {
jQuery('form.cart').submit(); //This part works just fine
} else {
mmProduct = null;
shopCartBtnClicked = true;
$(clickedLink).trigger('click'); //This doesn't
}
}
});
}
});
答案 0 :(得分:3)
做得不好,但这应该有效:
var shopCartBtnClicked = false;
var clickedLink;
jQuery('.add_to_cart_button').click(function(e) {
if (shopCartBtnClicked === true) {
shopCartBtnClicked = false;
// dont return, just let javascript handle this one
} else {
// only execute when you have not set it to true
e.preventDefault();
clickedLink = this;
shopCartBtnClicked = true;
$(clickedLink).trigger('click');
}
});
我不得不想知道你为什么不首先执行你的其他逻辑然后 而不是阻止默认。
答案 1 :(得分:2)
采用@ somethinghere的答案,您的代码可以进一步简化以提高可读性:
var shopCartBtnClicked = false;
jQuery('.add_to_cart_button').click(function(e) {
if( shopCartBtnClicked ) {
shopCartBtnClicked = false;
// dont return, just let javascript handle this one
} else {
// only execute when you have set it to true
e.preventDefault();
shopCartBtnClicked = true;
this.click();
}
});
或者,正如@Regent所建议的那样:
var shopCartBtnClicked = false;
jQuery('.add_to_cart_button').click(function(e) {
shopCartBtnClicked = !shopCartBtnClicked;
if( shopCartBtnClicked ) {
e.preventDefault();
this.click();
}
});
答案 2 :(得分:0)
这很奇怪,因为我在代码前面的回调中使用了$(this).('form.cart').submit();
。
'eventCallback': function () {
//Are we on a product detail page with a form, or just a shopping page with a link?
if (pdp) {
jQuery('form.cart').submit();
} else {
mmProduct = null;
document.location = $(clickedLink).attr('href');
//$(clickedLink).trigger('click');
}
}