如何配合Gravity Form使用jQuery调用WooCommerce商品基础价格
错误原因
- 变量类型错误:
BasePrice直接从DOM取文本内容,默认带货币符号(比如€、$、¥)和千位分隔符,是字符串类型,直接做乘法运算会得到NaN,无法正常计算价格。 - 执行时机错误:给
#input_2_9赋值的代码写在radio的change事件外,页面加载完成后就会立刻执行,此时用户还没选择radio选项,FinalPrice是未定义状态,赋值会失败。只有用户触发radio变更后计算出的FinalPrice才是有效值,赋值逻辑要放到change事件内部。 - 选择器语法错误:代码里的
"是HTML转义后的双引号实体,放到JS里会导致选择器识别失败,要替换为正常的双引号或单引号。
修正后代码(精简优化版)
$(function() { // 提取基础价格:只保留数字和小数点,转成浮点型 const getBasePrice = () => parseFloat($('.woocommerce-variation-price .amount').text().replace(/[^0-9.]/g, '')); // 用对象映射替代switch,更易维护,加新规则只需要加键值对 const priceMultiplier = { 'Enkele': 2, 'Dubble': 5, 'Wave': 6 }; // radio变更事件 $('.Select_plooi input[type="radio"]').on('change', function() { const selectedPlooi = $('input[name="input_4"]:checked').val(); // 取不到对应倍率就用1倍基础价当默认值,避免NaN const finalPrice = (getBasePrice() * (priceMultiplier[selectedPlooi] || 1)).toFixed(2); $('#input_2_9').val(finalPrice); }); });
优化点说明
- 把基础价格提取封装成独立函数,若后续商品变种切换后价格更新,也能实时拿到最新的基础价
- 用对象映射替换switch语句,代码更精简,后续新增选项的价格规则不需要修改逻辑,直接加对象键值对即可
- 加了默认倍率兜底,就算用户选中未定义的选项也不会出现NaN的异常值
- 移除了全局变量
FinalPrice和BasePrice,避免变量污染
内容的提问来源于stack exchange,提问作者Manouchehr Tizkhan
相关产品推荐
相关产品推荐

