【发布时间】:2023-03-03 06:52:21
【问题描述】:
在 WordPress Woocommerce 中,购物车通过 AJAX 和
我正在使用脚本将<b>+/-</b> 按钮实现到数量字段。<br><br>
使用 AJAX 重新加载购物车后,该功能不再对购物车产生影响,因为元素已重新加载。<br><br>
为了防止这种情况,我使用ajaxComplete 作为触发器来重新加载函数,但是当我点击+ 按钮时,输入字段会增加5 倍。 <br> <br>
使用警报进行调试显示增量被+1 触发了 5 次,而不是直接添加 5。
也许你可以看到问题:
jQuery(document).on("ready ajaxComplete",function($){
function quantityPlusMinus() {
function releaseUpdateCartButton() {
if (jQuery( "input[name='update_cart']" ).length) {
if (jQuery( "input[name='update_cart']" ).is(':disabled')) {
jQuery( "input[name='update_cart']" ).prop("disabled", false);
}
}
}
jQuery('div.quantity').on( 'click', '.plus, .minus', function() {
var qty = jQuery( this ).closest( 'div.quantity' ).find( '.qty' );
var val = parseFloat(qty.val());
var max = parseFloat(qty.attr( 'max' ));
var min = parseFloat(qty.attr( 'min' ));
var step = parseFloat(qty.attr( 'step' ));
// Change the value if plus or minus
if ( jQuery( this ).is( '.plus' ) ) {
if ( max && ( max <= val ) ) {
qty.val( max ).change();
} else {
qty.val( val + step ).change();
releaseUpdateCartButton();
}
} else {
if ( min && ( min >= val ) ) {
qty.val( min ).change();
} else if ( val > 1 ) {
qty.val( val - step ).change();
releaseUpdateCartButton();
}
}
});
}
quantityPlusMinus();
});
【问题讨论】:
-
尝试更改为静态元素绑定
$(document).on('click', '.quantity .plus, .quantity .minus', ...。它解决了你的问题吗? -
您的问题是
ajaxComplete事件。它捕获所有 ajax 事件,并且每个新请求都会再次运行您的函数。这意味着它会一遍又一遍地绑定点击事件。 -
@Justinas,不幸的是没有改变。 @harry,有没有办法加载脚本然后仅用于最后一个事件触发器?用于刷新的 woocommerce ajax 事件是“updated_cart_totals”。但是
jQuery(document).on("ready updated_cart_totals",function($){也是同样的错误,只是有 2 个多重增量而不是 5
标签: javascript jquery ajax wordpress woocommerce