在提交按鈕的 onclick 中循環檢查多個輸入框:
alert() 提示並停止初學者常犯兩個錯:
return false 導致循環只跑第一輪return 導致每輪都提交,彈出 N 次成功提示function validateAndSubmit() {
var inputs = document.querySelectorAll('.required-input'); // 獲取所有必填框
var isValid = true; // 標誌變量
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].value.trim() === '') {
alert('第 ' + (i+1) + ' 個輸入框不能為空');
inputs[i].focus();
isValid = false;
break; // 發現第一個錯誤即停止循環
}
}
if (isValid) {
// 全部通過,執行提交邏輯
document.getElementById('myForm').submit();
// 或 AJAX 提交
// fetch('/api/submit', { method: 'POST', body: new FormData(form) });
alert('提交成功');
}
// 否則不執行任何提交,函數自然結束
}
| 錯誤寫法 | 後果 | 正確寫法 |
|---|---|---|
循環內 return false | 函數直接結束,後續輸入框不檢查 | 設置 isValid = false; break; |
循環內直接 submit() | 每輪非空都提交一次 | 循環結束後統一判斷 isValid 再提交 |
無 break | 繼續檢查無意義,體驗差 | 發現首個錯誤即 break |
<form id="myForm" action="/submit" method="post">
<input type="text" name="username" required />
<input type="email" name="email" required />
<button type="submit">提交</button>
</form>
瀏覽器會自動攔截空值並提示,零 JS 代碼。現代項目首選原生驗證 + 服務端二次校驗。
required、type="email/number" 等原生屬性Validator.js、Yup 或框架內置驗證 (Vue/VeeValidate, React/Hook Form)理解「循環驗證與提交分離」的邏輯,能避開 90% 的表單提交坑。