为何组合写法的jQuery表单切换函数失效,拆分写法却正常?
问题排查:jQuery组合写法失效的原因及修复方案
嘿,我一眼就瞅出你组合写法里的问题了——条件判断的逻辑错误,这才是代码失效的核心原因,和两个表单位于不同页面关系不大哦。
咱们先看你组合写法里的这段判断:
if (this.value === 'Phone' || 'Mail') {
这里的写法完全踩了JavaScript逻辑判断的坑!逻辑或||的两边需要是布尔值表达式,但'Mail'是一个非空字符串,在JS里会被直接判定为true。这就导致不管单选框选中的是Phone、Mail还是Email,这个条件永远都会成立,所有操作都会走第一个if分支,自然和你预期的切换效果完全不符。
而你拆分写法里的判断是分开检查this.value === 'Mail'和this.value === 'Phone',逻辑是严谨的,所以能正常运行。
给你修正后的组合写法,只需要把条件判断改对就行:
$('input:radio[name="howToContact"]').change(function () { if (this.checked) { // 修正:分别和两个值做相等判断 if (this.value === 'Phone' || this.value === 'Mail') { $formPhoneSelected.fadeIn(750); $formEmailSelectedRepresentative.hide(); $formMailSelected.fadeIn(750); $formEmailSelected.hide(); } else if (this.value === 'Email') { $formEmailSelectedRepresentative.fadeIn(750); $formPhoneSelected.hide(); $formMailSelected.hide(); $formEmailSelected.fadeIn(750); } } });
另外补充个小建议:因为两个表单位于不同页面,共用这段代码时最好给每个jQuery对象加个存在性判断,比如if ($formPhoneSelected.length),避免某个页面没有对应元素时触发报错,让代码更健壮。
内容的提问来源于stack exchange,提问作者hendy0817
相关产品推荐
相关产品推荐

