javascript - 如何在Javascript中缩短多个if else语句
问题描述
我最近遇到了一种情况,我正在处理一个包含至少 60 个字段的巨大表单,我希望该表单仅在所有字段都已填写时才提交,如果没有,我想为每个未填写的字段显示自定义消息 (Sweetalert) . 例如,如果名字留空,则显示消息“请输入您的名字”,如果未选择居住国家/地区,则显示消息“请选择您的居住国家/地区”等等。当我使用 编写大量 if 和 else 语句来匹配每个字段document.getElementById()
时,我想到了做事不正确的想法。我尝试在网上搜索此内容,但找不到合适的方法来做这些事情。谁能建议我一个更好的方法,而不是写 100 行的 if else 语句?
解决方案
通过向表单控件添加特定类,您可以检索它们并遍历它们以检查哪些未填充。
假设这是您的表格:
<form id="myForm" name="myForm" novalidate>
<div>
<label for="control_1">Label_1:</label>
<input type="text" id="control_1" name="control_1" class="control" />
</div>
<div>
<label for="control_2">Label_2:</label>
<input type="text" id="control_2" name="control_2" class="control" />
</div>
<div>
<label for="control_3">Label_3:</label>
<input type="text" id="control_3" name="control_3" class="control" />
</div>
<div>
<label for="control_4">Label_4:</label>
<select id="control_4" name="control_4" class="control">
<option value="option_1">Option 1</option>
<option value="option_2">Option 2</option>
<option value="option_3">Option 3</option>
</select>
</div>
<div>
<input type="submit" value="Submit!" />
</div>
</form>
然后您可以使用.control
该类检索所有控件并检查它们:
function onSubmit(e) {
e.preventDefault();
const controls = document
.getElementById("myForm")
.querySelectorAll(".control");
controls.forEach(control => {
if (!isControlFilled(control)) {
console.log(control.id);
// Do whatever you want with control's id
}
});
}
// This is just for illustrative purposes
// Should be adapted to cover all control types
function isControlFilled(control) {
return control.value ? true : false;
}
推荐阅读
- javascript - 如何从另一个组件调用 mixin 函数?
- python - 使用 Selenium 删除亚马逊购物车中的产品
- reactjs - Redux Toolkit 中使用 ownProps 的 redux action 类型
- asp.net - 将 Azure 应用服务请求转发到 Azure Blob 存储
- html - SVG过滤器洪水不填充边框
- node.js - 通过 nodemon 重新启动时从 mongodb atlas 优雅地断开连接
- bash - 在 bash 脚本中使用 SQLite3 转换存储在数据库中的 UNIXEPOCH 时间戳
- javascript - 当我随机化它们的位置(加载和使用 setInterval)时,带有图像的 div 总是位于带有文本的 div 的顶部。JavaScript
- javascript - 使用 Firestore 获取文档集合
- excel - 在标签标题上查找行