JavaScript中首个if判断为true后如何继续执行后续条件判断
问题根因
你当前的代码无法执行后续校验的核心原因有两点:
- 用
else if关联了两组校验逻辑,只要第一组if判断命中,就会直接跳过第二个分支的判断 - 每个判断分支末尾加了
continue语句,会直接终止当前轮次的循环迭代,后续逻辑自然不会执行
修复方案
基础修复(直接调整现有逻辑)
把else if改为独立的if语句,同时删掉两个分支里的continue即可,调整后代码如下:
// 提前把Total重置为初始值 Total1 = 0.00; Total2 = 0.00; for (i = 0; i <= 1; i++) { if (h1 < 0 || h2 < 0) { alert("negative number is not acceptable here"); document.getElementById("up1").value = document.getElementById("up1").defaultValue; document.getElementById("q1").value = document.getElementById("q1").defaultValue; document.getElementById("tot1").value = document.getElementById("tot1").defaultValue; } // 改为独立if,不受上一个判断结果影响 if (h3 < 0 || h4 < 0) { alert("No Negative here as well") document.getElementById("up2").value = document.getElementById("up2").defaultValue; document.getElementById("q2").value = document.getElementById("q2").defaultValue; document.getElementById("tot2").value = document.getElementById("tot2").defaultValue; } else { // 只有h3、h4都非负的情况下才计算Total2 Total2 = h3 * h4; } }
优化方案(避免重复代码,可扩展性更好)
可以把重复的表单重置逻辑抽成通用函数,后续新增校验规则只需要新增配置即可:
// 通用重置函数 function resetGroup(upId, qId, totId, alertMsg) { alert(alertMsg); document.getElementById(upId).value = document.getElementById(upId).defaultValue; document.getElementById(qId).value = document.getElementById(qId).defaultValue; document.getElementById(totId).value = document.getElementById(totId).defaultValue; } Total1 = 0.00; Total2 = 0.00; for (i = 0; i <= 1; i++) { if (h1 < 0 || h2 < 0) { resetGroup("up1", "q1", "tot1", "negative number is not acceptable here"); } if (h3 < 0 || h4 < 0) { resetGroup("up2", "q2", "tot2", "No Negative here as well"); } else { Total2 = h3 * h4; } }
内容的提问来源于stack exchange,提问作者SahotaSkywalker
相关产品推荐
相关产品推荐

