javascript|表單驗證|動態 表單的驗證是開發WEB應用程式中常遇到的一關。有時候我們必須保證表單的某些項必須填寫、必須為數字、必須是指定的位元等等,這時候就要用到表單驗證了,一般我們常用的表單驗證有2種方式:
1、編寫JavaScript或VBScript的表單驗證函式,在用戶端進行驗證;
2、在表單提交後,使用ASP的方法Request.Form擷取表單的輸入值進行判斷,然後返回結果,這是在服務端進行驗證;
這2種方式都有其優缺點,比如第1種方式速度比較快,而且通常使用警告框的方式,使用者能夠很快的根據提示完成表單的填寫,但是缺點就是使用者的瀏覽器必須是支援JavaScript指令碼的,再不然如果他關閉了JavaScript,那就!@#$%&^*(小田已經倒在地上了^_^);而第2種方式的相容性比較好,但是缺點是速度比較慢(提交到服務端,在返回)而且使用也不方便。這次主要是用JavaScript的方法來驗證,當然,如果同時用2種方式來驗證是最保險了,不過(汗…………)要累死我們這些程式員了:)
上面解釋了表單驗證的2中方式,下面就具體來講講動態產生JavaScript的概念。為什麼要動態產生呢?因為這種用戶端的驗證代碼是很煩瑣的,如果每次都要自己編寫真是累啊!用慣DW(Dreamweaver)或UD的朋友可能通常使用表單驗證的外掛程式,使用後產生的程式碼也沒有藝術感,而且很多是用不到的(代碼冗餘)。小田要講的是,產生完全符合表單情況的代碼。
聲明:小田對JavaScript並不精通,這裡只是想談談動態產生的方法,JS的高手完全可以自己改。
那麼我們開始嘍。
1、我們先來看看一段簡單的JavaScript的驗證代碼:
<formname="form1"><inputtype="text"name="name"></form>
這段代碼是驗證表單form1的name表單項,必須填寫內容。這裡就有幾個關鍵的部分:表單網域名稱稱、表單項名稱、判斷語句;這些就是我們下面編寫ASP函數的關鍵了。
2、如何產生JavaScript代碼。最簡單的,就是用Response.Write輸出了,比如把上面代碼輸出就可以是:
這裡的vbCrlf是一個斷行符號換行,&是串連符,&_是代碼換行串連的字元。
3、這段代碼的頭和尾是基本固定不變的,變化的是中間的if判斷部分,我們可以先把這部分寫成函數,小田已經寫好一個了,大家可以參考一下,下面是代碼:
FunctionfindJS(frmName,errStr)
DimtmpArr
Dimi
'參數值
i=0
'擷取錯誤清單,建立數組
tmpArr=Split(errStr,"|")
'輸出查詢條件
SelectCasetmpArr(i+1)
Case"0"'必填的Text類型
findJS="if((document."&frmName&"."&tmpArr(i)&".value)=="""")"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"1"'必填的ListMenu類型
findJS="if((document."&frmName&"."&tmpArr(i)&".value)=="""")"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"2"'必須為數位Text類型
findJS="if(isNaN(document."&frmName&"."&tmpArr(i)&".value))"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"3"'必須為指定位元的Text類型
findJS="if(document."&frmName&"."&tmpArr(i)&".value.length="&tmpArr(i+3)&")"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"4"'必須大於指定位元的Text類型
findJS="if(document."&frmName&"."&tmpArr(i)&".value.length>"&tmpArr(i+3)&")"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"returnfalse;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"returntrue;"&vbCrlf
ExitFunction
Case"5"'必須為Email的Text類型
findJS="if((!emailReg.test(document."&frmName&"."&tmpArr(i)&".value))&&(document."&frmName&"."&tmpArr(i)&".value!=''))"&vbCrlf&_
"{"&vbCrlf&_
"window.alert('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_