表單驗證方式的通用化
此文是“Web頁面表單域驗證方式的改進”的續篇。在上一篇“Web頁面表單域驗證方式的改進“中,我們通過把驗證法則(正則表達式和是否必填字段)寫在表單域中,將驗證過程和驗證法則成功的分離,從而減少了重復代碼,使驗證變得簡單易行,在實際使用中,我們可以把驗證過程放在一個JS文件中,對于全輸入驗證界面,在頁面的表單驗證部分只需要調用其中的checkForm函數就能進行有效驗證,頁面上不再需要書寫重復性高的JS驗證代碼;對于復雜的表單,比如其中含有復選框或是需要兩個文本框比較的地方,這種方法也可讓你不寫通用驗證代碼而把主要精力放在特殊的驗證上。這些能減輕不少工作量,讓繁瑣的工作變得輕松愉快起來。
下面我們看一看這種用法的實際使用。
首先,我們可以把驗證過程放在一個JS文件中,具體代碼如下:
formchecker.js




















































下面想驗證一個用戶登錄頁面,它的頁面部分代碼如下:
















































































請注意其中沒有任何頁面驗證的JS代碼,只有在表單驗證的地方調用formchecker.js中的函數。
不需要寫JS代碼,只需要引入formchecker.js,就實現了表單的驗證,下面是驗證效果之一:

對于復雜一些的頁面,在formchecker.js的幫助下也能有效減少驗證代碼量,你只要書寫一些特殊的通過validchar不能驗證的代碼即可,比如說如下注冊頁面:

你只要書寫兩次密碼比較的JS代碼,其它的還是可以讓checkForm函數幫你完成。具體代碼如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>"我的事務備忘錄"用戶注冊頁面</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="web/js/ajax.js" type="text/javascript"></script>
<script src="web/js/formchecker.js" type="text/javascript"></script>
<link rel="stylesheet" rev="stylesheet" href="web/css/style.css"
type="text/css" />
</head>
<body>
<div>
<%
String msg = (String) request.getAttribute("Msg");
if (msg != null) {
out.print(msg);
}
%>
<!-- 外層表格,比內表格寬,以在左右留出一定空當 -->
<table style="border-right: 1px solid; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid; boder_top: 0px" bordercolor="#236d78" cellspacing="0" cellpadding="0" width="530" align="center" border="0">
<tr bgcolor="#eaecf5" height="25">
<td colspan=3> <font face=webdings color=#ff8c00>8</font><b> 注冊個人用戶</b></td>
</tr>
<tr bgcolor=#236d78 height=1><td></td></tr>
<tr bgcolor=#eaecf5 >
<td bgcolor=#ffffff>
<!-- 內置表格,居中,比外表格窄, -->
<form action="UserRegister" onsubmit="return check(this);">
<table width=460 align=center border=0>
<tbody>
<tr>
<td width=70>用戶名:</td>
<td>
<input type="text"
name="userName"
validChar="[\u4E00-\u9FA5]{2,3}"
isRequired="true"
onfocus="this.style.backgroundColor='#e6e6e6'"
onblur="this.style.backgroundColor='#ffffff'"/>
<font color=red> (必填)</font>
<span id="userNameMsg" class="feedbackHide">用戶名必須輸入兩到三位漢字</span>
</td>
</tr>
<tr>
<td width=70>密碼:</td>
<td>
<input type="text"
name="userPswd"
validChar="\w+"
isRequired="true"
onfocus="this.style.backgroundColor='#e6e6e6'"
onblur="this.style.backgroundColor='#ffffff'"/>
<font color=red> (必填)</font>
<span id="userPswdMsg" class="feedbackHide">密碼必須輸入英語或數字</span>
</td>
</tr>
<tr>
<td width=70>再次輸入密碼:</td>
<td>
<input type="text"
name="userPswd2"
validChar="\w+"
isRequired="true"
onfocus="this.style.backgroundColor='#e6e6e6'"
onblur="this.style.backgroundColor='#ffffff'"/>
<font color=red> (必填)</font>
<span id="userPswd2Msg" class="feedbackHide">密碼必須輸入英語或數字</span>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="注冊"/></td>
</tr>
</tbody>
</table>
</form>
<!-- 內置表格結束-->
</td>
</tr>
</table>
<!-- 外層表格結束 -->
<div>
</body>
</html>
<script LANGUAGE="JavaScript">
<!--
function check(vform){
// 先進行文本框基本驗證
if(checkForm(vform)==false){
return false;
}
// 取得密碼
var userPswd=$("userPswd").value;
// 取得第二次密碼
var userPswd2=$("userPswd2").value;
// 檢查兩次密碼是否對應
if(userPswd2!=userPswd){
alert("兩次輸入的密碼不相同");
$("userPswd2").focus();
return false;
}
return true;
}
//-->
</script>
注意看上面的js代碼比常規方案減少了多少。
如果頁面上有其它控件如復選框,列表框等也可照此辦理,把文本框的通用驗證交給formchecker.js的checkForm和checkTextBox進行,在頁面的js代碼中只寫特殊的處理,這樣能減輕不少工作量,讓繁瑣的工作變得輕松愉快起來。
posted on 2008-04-07 21:41 sitinspring 閱讀(2342) 評論(7) 編輯 收藏 所屬分類: Web開發 、JavaScript