function checkUaddr(str) {
if (str == "" || str == "請選擇所在省份" || str == "請選擇所在城市") {
document.getElementById("uaddrErr").innerHTML = "地址不能為空";
// 聚焦第一個下拉框
document.userform.province.focus();
return false;
} else {
document.getElementById("uaddrErr").innerHTML = "驗證通過";
return true;
}
}
function check() {
try {
if (!checkUname(document.userform.uname.value)) return false;
if (!checkUpwd(document.userform.upwd.value)) return false;
if (!checkUpwd2(document.userform.upwd2.value)) return false;
// 省份和城市至少選一個非默認值
if (!checkUaddr(document.userform.province.value)) return false;
if (!checkUaddr(document.userform.city.value)) return false;
return true;
} catch (e) {
console.error("校驗異常:", e);
alert("頁面腳本錯誤,請聯系管理員");
return false; // 異常時攔截提交
}
}
| 優化點 | 實現 |
|---|---|
| 實時校驗 | `onchange` / `oninput` 即時提示,減少提交時挫折感 |
| 聯動校驗 | 省份改變時重置城市,城市為空則禁用提交 |
| 防重複提交 | `check()` 內禁用提交按鈕 `btn.disabled=true`,AJAX 完成後恢復 |
| 服務端二次校驗 | **前端校驗只為體驗,後端必須再次校驗**,防繞過 |
表單 `onsubmit` 失效 99% 是 **JS 校驗函數缺失或拋異常導致中斷**。補全 `checkUaddr`、包裹 `try-catch` 返回 `false`、規範 HTML 結構,即可徹底解決。切記:**前端校驗不可信,後端必驗**。