解决JS表单验证中因return导致后续校验失效的问题
本文分析了JS表单验证中常见错误:在if-else分支中直接使用return返回结果,导致第一个条件满足或返回后,后续校验代码无法执行。通过引入布尔标记变量,将所有校验初始化为true,仅在条件不满足时修改标记并提示,最后统一判断所有标记状态决定是否提交表单,从而确保所有校验规则均被检查。
文章源自:https://blog.csdn.net/qq_38215042/article/details/84675988
问题原因分析
具体实现代码如下所示:
if(条件语句){
return false;
}else{
return true;
}
if(条件语句){
return false;
}else{
return true;
}
if(条件语句){
return false;
}else{
return true;
}
你是否遇到过类似的情况?在实际开发中,如果在if-else语句块中直接使用return返回结果,虽然逻辑看似通顺,但会导致严重问题。当表单提交触发校验时,如果第一个if条件判断返回true,表单会立即执行提交动作,此时后续的if-else语句将不再执行,导致其他校验规则失效。
解决方案与标记变量法
推荐的解决方案是使用标记变量法。首先将所有校验项的标记初始化为true,随后依次执行各个if条件判断。如果某个条件不满足,则修改对应标记为false,并弹出提示框告知用户。只有当所有if条件判断完成后,检查所有标记是否均为true,若是,则执行表单提交;否则阻止提交。
如有其他更优方案,欢迎在评论区交流讨论。
1:JS代码实现
代码中需要引入jquery库
JS校验代码实现
<script type="text/javascript">
function checkForm() {
var productName = true;
var chanDi = true;
var muChanLiang = true;
var zongChanLiang = true;
var xiangQiang = true;
var yuShouJia = true;
var phone = true;
var pattern = /^1[34578]\d{9}$/; //验证手机号正则表达式
if ($("#userName") == "") {
alert("请输入产品名称!");
/* alert($("#gsp_add_img_23").val()); */
productName = false;
} else if ($("#candi").val() == "") {
alert("请输入产地!");
chanDi = false;
} else if ($("#muchan").val() == "") {
alert("请输入亩产量!");
muChanLiang = false;
}else if ($("#zongChan").val() == "") {
alert("请输入总产量!");
zongChanLiang = false;
} else if ($("#xiangqing").val() == "") {
alert("请输入产品详情!");
xiangQiang = false;
} else if ($("#yushoujia").val() == "") {
alert("请输入预售价!");
yuShouJia = false;
} else if (!pattern.test($("#userPhone").val())) {
alert("手机号格式错误");
phone = false;
}
if (productName == true && chanDi == true && muChanLiang == true &&
zongChanLiang == true && xiangQiang == true && yuShouJia == true && phone == true) {
$("#ListForm").submit();
}
}
</script>
2:HTML表单结构
HTML表单结构
<form action="$!webPath/new/fl_npsh.htm" method="post" name="ListForm"
id="ListForm" enctype="multipart/form-data" >
<!-- 类似首页楼层模块 -->
<div style="width: 1020px; margin: 0 auto;">
<div class="floor floor_purple"
style="width: 1011px; border-top: 1px solid #eee;">
<div class="liebiao"
<!-- 给后台传一个id -->
<input name="id" type="hidden" id="id" value="$!obj.id" />
</div>
<div class="liebiao">
<!-- <span class="liebiao_left" style="color:red">*</span> -->
<span class="liebiao_left">产品名称:</span> <input id="userName"
type="text" name="product_name" class="shuruk"
placeholder="例:灵宝SOD苹果(*必填项 *)" />
</div>
<div class="liebiao">
<span class="liebiao_left">产品产地:</span> <input type="text"
value="" name="product_origin" class="shuruk" id="candi"
placeholder="例:灵宝寺河山(*必填项 *)" />
</div>
<div class="liebiao">
<span class="liebiao_left">产品亩产量:</span> <input type="text"
value="" name="mu_yield" class="shuruk" id="muchan"
placeholder="例:每亩产量(*必填项 *)" />
</div>
<div class="liebiao">
<span class="liebiao_left">产品总产量:</span> <input type="text"
value="" name="sum_yield" class="shuruk"
placeholder="例:总产量(*必填项 *)" id = 'zongChan'/>
</div>
<div class="liebiao" style="height: 60px;">
<span class="liebiao_left"
style="display: inline-block; height: 60px; line-height: 30px; float: left;">产品详情:</span>
<textarea type="text" value="" id="xiangqing"
name="product_details" class="shuruk02"
placeholder="例:产品种植标准、产品优点、产品性能、储存注意事项等(*必填项 *)"></textarea>
</div>
<div class="liebiao">
<span class="liebiao_left">产品预售参考价:</span> <input type="text"
value="" id="yushoujia" name="advance_price" class="shuruk"
placeholder="例:以每500g为单位(*必填项 *)" />
</div>
<div class="liebiao">
<span class="liebiao_left">站主联系方式:</span> <input id="userPhone"
value="" name="phone" class="shuruk"
placeholder="(*必填项 *)" />
</div>
<div class="liebiao" style="margin-top: 30px;">
<input type="button" value="立即申请" class="tijiao" onclick="checkForm()">
</div>
</div>
</div>
</form>
总结
以上内容介绍了如何解决JS表单验证中因return导致只有第一个IF生效的问题,希望对你有所帮助。如有疑问请留言,小编会及时回复。感谢大家对本站的支持!
JS合并多个数组的三种方法:concat、spread与flat
2026-11-05 17:39:45
JavaScript怎么准确判断数据类型:typeof、instanceof与Object.prototype.toString
2026-11-05 17:09:21
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
