Gravity Form中通过jQuery实现mm与cm单位转换的问题求解
错误原因
- 选择器大小写不匹配:你备注中单选按钮的类名为
.Select_unit,代码中写为.Select_Unit,JS选择器大小写敏感,导致无法正确绑定切换事件 - 单选按钮name属性选择器写法错误:
$('input[name="#input_2_3"]:checked')中name属性值不需要加#前缀,#是id选择器的专属标识,错误写法会导致无法获取选中的单选按钮值 - 转换逻辑有缺陷:仅在输入时存储原始值,未考虑不同单位下输入的场景,切换单位时容易出现计算偏差;未做非空、非数字校验,输入为空时转换会出现
NaN - 输入监听事件覆盖不全:仅监听
keyup事件,无法覆盖用户粘贴、拖拽输入等场景,建议替换为input事件 - 缺少精度处理:单位转换后可能出现多位小数,无精度处理会导致数值显示不规范
正确实现代码
$(function() { var W_val, H_val; var currentUnit = 'mm'; // 可根据表单默认选中的单位调整初始值 // 监听宽度输入 $('#input_2_1').on('input', function() { W_val = $(this).val(); }); // 监听高度输入 $('#input_2_2').on('input', function() { H_val = $(this).val(); }); // 单位切换事件 $('.Select_unit input[type="radio"]').on('change', function() { var radioValue = $('input[name="input_2_3"]:checked').val(); // 非数字/空值直接返回避免报错 if (!W_val || !H_val || isNaN(W_val) || isNaN(H_val)) return; if (radioValue === 'cm' && currentUnit === 'mm') { // mm转cm除以10,保留1位小数 $("#input_2_1").val((parseFloat(W_val) / 10).toFixed(1)); $("#input_2_2").val((parseFloat(H_val) / 10).toFixed(1)); currentUnit = 'cm'; } else if (radioValue === 'mm' && currentUnit === 'cm') { // cm转mm乘以10 $("#input_2_1").val(parseFloat(W_val) * 10); $("#input_2_2").val(parseFloat(H_val) * 10); currentUnit = 'mm'; } }); });
更精简的实现方案
不需要单独存储输入值变量,切换时直接读取当前输入框的值做转换,代码更简洁:
$(function() { const $width = $('#input_2_1'), $height = $('#input_2_2'); // 直接绑定单选按钮切换事件 $('.Select_unit input[type="radio"]').on('change', function() { const targetUnit = $(this).val(); // 非数字校验跳过转换 if (isNaN($width.val()) || isNaN($height.val())) return; // 转换系数:切cm除以10,切mm乘以10 const ratio = targetUnit === 'cm' ? 0.1 : 10; // 按单位控制小数位数 const fixed = targetUnit === 'cm' ? 1 : 0; $width.val((parseFloat($width.val()) * ratio).toFixed(fixed)); $height.val((parseFloat($height.val()) * ratio).toFixed(fixed)); }); });
Gravity Form界面参考:
内容的提问来源于stack exchange,提问作者Manouchehr Tizkhan
相关产品推荐
相关产品推荐

