WooCommerce:根据所选的运输方式隐藏运输计算器

问题描述

我试图根据选择的送货方式(首先加载页面),然后在用户选择其他方式或更新购物车时,在购物车页面上隐藏送货计算器(使用jQuery),这将启用/禁用新的送货方式,但我似乎无法使其正常工作。

我的Javascript / jQuery非常生锈,所以我不知道自己在做什么错。

下面是我尝试过的代码。它的工作方式就像我希望页面加载一样(=如果选择“免费送货”,或者如果它是唯一可用的送货方式,则送货计算器将被隐藏。

但是,当我选择其他送货方式时,除非我手动重新加载页面,否则送货计算器将不会再次显示

如果购物车更新了额外的产品数量(通过直接在购物车页面增加产品数量)以达到可以免费送货的最低数量,则也将无效。

jQuery(document).ready(function() {
    if(jQuery("*[id*=free_shipping]").is(':checked') || jQuery("*[id*=free_shipping]").is(':hidden') ){
        jQuery(".woocommerce-shipping-calculator").css("display","none");
    }
    else{
        jQuery(".woocommerce-shipping-calculator").css("display","block");

    }
});


jQuery("input[type=radio]").click(function() {
    if(jQuery("*[id*=free_shipping]").is(':checked')){
        jQuery(".woocommerce-shipping-calculator").css("display","none !important");
    }
    else{
        jQuery(".woocommerce-shipping-calculator").css("display","block !important");

    }
})

任何帮助将不胜感激!

谢谢

解决方法

尝试以下脚本,它将起作用。实际上,在每个单选框选择上,运输选择器都在重新加载,并且每当您重新加载HTML元素时,.click()事件都需要与此进行新的绑定。在jQuery中,我们以前曾将其称为.live(),现在我们使用.on()。使用相同的选择器或标识,重新绑定的新元素将使绑定保持完整。

jQuery(document).ready(function($) {
if(jQuery("*[id*=free_shipping]").is(':checked') || jQuery("*[id*=free_shipping]").is(':hidden') ){
    jQuery(".woocommerce-shipping-calculator").css("display","none");
}
else{
    jQuery(".woocommerce-shipping-calculator").css("display","block");

}    
jQuery('body').on('click',"input[type=radio]",function() {
 
  if(jQuery("*[id*=free_shipping]").is(':checked')){
    setTimeout(function(){jQuery(".woocommerce-shipping-calculator").hide();},500);          
  }
  else{
    setTimeout(function(){jQuery(".woocommerce-shipping-calculator").show();},500);
  }  
});
});
,

非常感谢您的解释和代码。

除了我尝试更新购物车时,它几乎可以正常运行。如果我有一辆足以触发免费送货的购物车(超过150欧元),然后我删除了一个产品,在下面有一个购物车150欧元,然后单击“更新购物车”,则将显示常规的送货方式,但送货计算器不会再次显示。 要再次显示它,我必须单击一种送货方式的单选按钮。

我试图将您提供给我的代码进行类似的工作,但是无法使其工作:/

def create_task_from_json(json_obj):
    new_task = Task(id = json_obj.get("id"),title = json_obj.get("title"),description = json_obj.get("description"),priority = json_obj.get("priority"),categoryid = json_obj.get("categoryid"))

我尝试使用jQuery(document).ready(function($) { if(jQuery("*[id*=free_shipping]").is(':checked') || jQuery("*[id*=free_shipping]").is(':hidden') ){ jQuery(".woocommerce-shipping-calculator").css("display","none"); } else{ jQuery(".woocommerce-shipping-calculator").css("display","block"); } jQuery('body').on('click',function() { if(jQuery("*[id*=free_shipping]").is(':checked') || jQuery("*[id*=free_shipping]").is(':hidden')){ setTimeout(function(){jQuery(".woocommerce-shipping-calculator").hide();},500); } else{ setTimeout(function(){jQuery(".woocommerce-shipping-calculator").show();},500); } }); }); jQuery("input[type=submit]").on('click',function() { if(jQuery("*[id*=free_shipping]").is(':checked') || jQuery("*[id*=free_shipping]").is(':hidden')){ setTimeout(function(){jQuery(".woocommerce-shipping-calculator").hide();},500); } else{ setTimeout(function(){jQuery(".woocommerce-shipping-calculator").show();},500); } }); 而不是".button",并且还尝试将这段额外的代码放入整个"input[type=submit]"中。

我还有一个问题:隐藏/显示运费计算器不会与内部WooCommerce功能混淆吗?因为我也张贴在wordpress.org上,并且Woo支持人员告诉我这是一个相当复杂的开发主题。所以我想知道我是否应该这样做?

再次感谢!