数量更改后自动更新购物车

时间:2017-06-26 作者:Krystian

我正在尝试在数量更改后自动更新woocommerce购物车。函数中的以下代码。php正在工作,但只有在我更改两次数量时才更新购物车。你知道怎么修吗?

add_action( \'wp_footer\', \'cart_update_qty_script\' );
function cart_update_qty_script() {
    if (is_cart()) :
    ?>
    <script>
        jQuery(\'div.woocommerce\').on(\'change\', \'.qty\', function(){
            jQuery("[name=\'update_cart\']").trigger("click"); 
        });
    </script>
    <?php
    endif;
}

3 个回复
最合适的回答,由SO网友:heraphim 整理而成

差不多晚了一年,但这个问题可能仍然会吸引访问者:您触发了单击,但按钮没有足够的时间启用,因此,当您第二次单击按钮时,按钮就会启用。在触发单击之前删除“禁用”属性:

    <script>
    jQuery(\'div.woocommerce\').on(\'change\', \'.qty\', function(){
        jQuery("[name=\'update_cart\']").prop("disabled", false);
        jQuery("[name=\'update_cart\']").trigger("click"); 
    });
    </script>

SO网友:CodeMascot

您的上述代码在我的本地系统中运行得很好。不知道为什么它不能在你的系统上工作。但是你可以试着写JS 代码如下-

add_action( \'wp_footer\', \'cart_update_qty_script\' );
function cart_update_qty_script() {
    if (is_cart()) :
        ?>
        <script type="text/javascript">
            (function($){
                $(function(){
                    $(\'div.woocommerce\').on( \'change\', \'.qty\', function(){
                        $("[name=\'update_cart\']").trigger(\'click\');
                    });
                });
            })(jQuery);
        </script>
        <?php
    endif;
}
我认为这是一种更精确、更干净的方法。

希望以上的事情能有所帮助。

SO网友:Ryszard Jędraszyk

我创建了一个免费插件Ajax Cart AutoUpdate 在产品数量更改时更新购物车页面和迷你购物车总计。它有很好的附加选项,但仅脚本就可以提供更广泛的浏览器支持和更好的用户体验。

由于引入了更新延迟,Ajax调用不会持续发送,在所提供的示例中是1000毫秒,但实际的插件代码使用设置中指定的值。其工作原理如下:

自用户在“设置”(默认值1000)中指定的上次影响数量的操作以来,购物车更新延迟了毫秒数。这意味着当用户完成更改时,更新只会触发一次

同样对于页面速度狂热者,请记住,如果您想推迟jQuery,最好使用wp_enqueue_script, 设置了jQuery依赖项,因为在这种情况下,带有jQuery的内联脚本将失败。

var timeout;

jQuery(\'div.woocommerce\').on(\'change keyup mouseup\', \'input.qty\', function(){ // keyup and mouseup for Firefox support
    if (timeout != undefined) clearTimeout(timeout); //cancel previously scheduled event
    if (jQuery(this).val() == \'\') return; //qty empty, instead of removing item from cart, do nothing
    timeout = setTimeout(function() {
        jQuery(\'[name="update_cart"]\').trigger(\'click\');
    }, 1000 ); // schedule update cart event with 1000 miliseconds delay
});

结束

相关推荐