【问题标题】:Javascript execute function on Woocommerce checkout eventWoocommerce结帐事件上的Javascript执行功能
【发布时间】:2021-04-30 05:26:51
【问题描述】:

我需要等待结算国家/地区更改后结帐更新,然后才能在 Woocommerce 上运行一些 AJAX 调用。

jQuery('select#billing_country').change(function(){
       $( document.body ).on( 'updated_checkout', function( e, data ) {
         //AJAX calls here
        });
});

问题是其中一些调用也会更新结帐,这会导致无限循环。 每次更改帐单国家/地区时,有没有办法只等待结帐更新一次(仅第一次)?所以是这样的:

jQuery('select#billing_country').change(function(){
       $when.firsttime( 'updated_checkout', function( e, data ) {
         //AJAX calls here
        });
});

谢谢!

【问题讨论】:

  • 每次计费国家/地区再次更改时,.one() 是否会反弹到事件中,还是保持未绑定状态?如果是前者,那么我认为这将是解决方案?

标签: javascript ajax woocommerce checkout


【解决方案1】:

由于 updated_checkout 事件,结帐更新后,以下功能仅执行一次。

因此:

  1. #billing_country 字段已更改
  2. 执行 AJAX update_checkout(未“更新”)调用以更新购物车
  3. 一旦结帐更新(使用 updated_checkout 事件),就会进行自定义 AJAX 调用(仅当 checkout_is_updated 变量为 false 时)。

每次更新整个页面时,checkout_is_updated 变量都会初始化为“false”。

// executes one or more instructions only once after checkout has been updated
jQuery( function($) {
    // set a control variable
    var checkout_is_updated = false;
    // if the "#billing_country" field changes, update the checkout
    $('form.checkout').on('change', '#billing_country', function(){
        $(document.body).trigger('update_checkout');
        // after the checkout has been updated
        $( document.body ).on( 'updated_checkout', function(){
            // just once
            if ( checkout_is_updated == false ) {
                /*
                    * AJAX calls here
                */
                checkout_is_updated = true;
            }
        });
    });
});

代码已经过测试并且可以运行。

【讨论】:

  • 感谢您的帮助!但是,这不是我想要做的,我希望代码在结帐更新后运行一次,并且只运行一次,因为我使用 $(document.body).trigger('update_checkout');内。
猜你喜欢
  • 2015-01-11
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
相关资源
最近更新 更多