之前在項目中爲一個表單(from)編寫onsubmit()腳本的時候,常常須要驗證表單中數據的合法性,因此常會寫道:<form action="/admin/addUser.do" method="post" onsubmit="validateForm();">,試圖在validateForm()中return false來阻止表單的提交。實際上的效果是即便return false 表單 仍是會提交。後來發現 onsubmit="return validateForm()"就沒有問題了。ide
今天在調試項目的bug時,遇到了表單提交前驗證的問題,用一個普通的button按鈕代替submit按鈕,
在提交前觸發這個button的onclick事件,在其事件中觸發form的submit事件。問題出現了,如下是程序代碼:post
<input type="button" name="save" value="保存" onclick="saveProject();"/>google
saveProject()方法以下:spa
function saveProject(){
var matCategory = document.getElementsByName("matCategory");
var flag = false;
for(i=0;i<matCategory.length;i++){
var checkbox = matCategory[i];
if(checkbox.checked == true){
flag = true;break;
}
}
if(flag){
proForm.submit();
return;
}
alert("請選擇產品分類!");
}調試
卻發現並無觸發form的onsubmit方法,而是直接提交了。奇怪了,難道沒有這種方式沒法結合form的onsubmit方法嗎?後來經過百度和google將saveProject方法改成以下:在表單提交前作了一下驗證orm
function saveProject(){
var matCategory = document.getElementsByName("matCategory");
var flag = false;
for(i=0;i<matCategory.length;i++){
var checkbox = matCategory[i];
if(checkbox.checked == true){
flag = true;break;
}
}
if(flag){
if(document.proForm.onsubmit() == true){
proForm.submit();
}
return;
}
alert("請選擇產品分類!");
}事件
這個問題耗費了我半個小時,所以記下來但願下次再也不犯錯,不得不說細節決定成功與否!get