You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript检测国家代码切换货币时页面反复刷新问题求助

问题根因

你的代码触发了无限刷新死循环:表单提交后页面刷新,JS会重新加载执行,再次请求IP接口、修改下拉值触发提交,往复循环。return 仅能终止当前单次函数的执行,无法阻止页面刷新后逻辑重新运行,所以无法解决问题。另外你的代码中AR、CA两个国家分支仅给下拉框赋值,没有触发change事件,不会提交表单更新货币,属于功能缺失bug。

修复方案
  • 用sessionStorage做状态标记,货币设置完成后写入标记,页面重新加载时先判断标记存在就跳过IP检测逻辑,避免循环提交
  • 统一所有国家分支的处理逻辑,赋值后判断当前值和目标值是否一致,不一致再触发change事件,避免无效提交
  • 简化多分支判断逻辑,提升可维护性
修复后代码
// 页面加载先判断是否已经设置过货币,已经设置过就跳过IP检测逻辑
if (!sessionStorage.getItem('currency_has_set')) {
  $.ajax({
    url: "https://ipinfo.io/json",
    type: "GET",
    success: function(location) {
      const $currencySelect = $(".shopify-currency-form select");
      let targetCurrency = '';
      switch(location.country) {
        case 'AU':
          targetCurrency = 'AUD';
          break;
        case 'AR':
          targetCurrency = 'ARS';
          break;
        case 'CA':
          targetCurrency = 'CAD';
          break;
        case 'US':
          targetCurrency = 'USD';
          break;
        // 其他国家默认逻辑可在此补充
        default:
          return;
      }
      // 只有当前值和目标值不一致的时候才修改并提交
      if ($currencySelect.val() !== targetCurrency) {
        $currencySelect.val(targetCurrency).change();
        // 标记已经设置过货币,刷新后不再执行
        sessionStorage.setItem('currency_has_set', '1');
      }
    }
  });
}

$('.shopify-currency-form select').on('change', function() {
  $(this).parents('form').submit();
});

如果需要用户手动修改货币后下次打开还生效,可将sessionStorage替换为localStorage,同时补充用户手动切换货币时更新存储值的逻辑即可。

内容的提问来源于stack exchange,提问作者user1924165

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:15:09