既然表單是用來采集用戶輸入的數(shù)據(jù),那么,就應(yīng)該保證用戶的數(shù)據(jù)被準(zhǔn)確地提交到預(yù)定的地點(diǎn),也就是說,我們在表單提交的時(shí)候,應(yīng)該對用戶的數(shù)據(jù)進(jìn)行檢驗(yàn),一來可以避免用戶誤輸數(shù)據(jù),二來可以避免用戶輸入非法的,或者說不合格的數(shù)據(jù);檢驗(yàn)合格以后,還要保證用戶的數(shù)據(jù)提交到特定的程序。
1.?dāng)?shù)據(jù)的檢驗(yàn)
數(shù)據(jù)的檢驗(yàn),通常有兩種程序:客戶端檢驗(yàn)和服務(wù)器端檢驗(yàn)。客戶端檢驗(yàn),比較快,服務(wù)器端檢驗(yàn),相對來說比較慢,為了確保安全,通常同時(shí)采用,這樣就可以避免用戶刻意破壞。
不管采用什么方式,數(shù)據(jù)檢驗(yàn)的原理都是一樣的,一旦用戶輸入的數(shù)據(jù)不符合規(guī)定,就報(bào)錯(cuò),要求用戶重新輸入,客戶端檢驗(yàn)常使用Javascrip腳本,服務(wù)器端的視系統(tǒng)而定,本文不對數(shù)據(jù)檢驗(yàn)的具體程序設(shè)計(jì)進(jìn)行探討,僅僅列舉幾個(gè)例子來說明。
樣例19:必填項(xiàng),以及簡單的數(shù)據(jù)類型檢驗(yàn)
分析:
- 本例給表單添加了onSubmit事件,通過onSubmit="return CheckDate()"指定提交前,必須通過函數(shù)CheckDate()來檢驗(yàn),如果不合格,返回輸入數(shù)據(jù);
- 數(shù)據(jù)檢驗(yàn)的函數(shù)如下:
<script>
function CheckDate(){
//取得輸入的數(shù)據(jù)
userName = document.RedForm.userName.value;
userEmail = document.RedForm.userEmail.value;
//如果沒有輸入姓名
if (userName=="") {
alert("請輸入姓名");
document.RedForm.userName.focus();
return false;
}else{
//如果沒有輸入Email,或者Email地址錯(cuò)誤(不含@)
if ((userEmail=="")||(userEmail.indexOf("@")==-1)) {
alert("請重新輸入Email地址");
document.RedForm.userEmail.focus();
return false;
}else return true;
}
}
</script>
2.表單的分支提交
有的時(shí)候,表單需要根據(jù)用戶的選擇,提交到不同的程序,怎么做呢?
通過腳本來檢測用戶的選擇分支,從而向不同的程序提交表單,看看樣例:
樣例20:分支提交
分析:這里首先用到的是form的onSubmit="TwoSubmit(this)"
然后根據(jù)選擇的分支,來分別遞交到不同的程序,TwoSubmit()函數(shù)如下:
<script>
function TwoSubmit(form){
if (form.Ref[0].checked){
form.action = "cop.asp";//這里是分之一
}else{
form.action = "ind.asp";//這里是分之二
}
form.submit();
}
</script>
3.用任何元素提交表單
是不是只有按鈕或者圖片按鈕才能提交表單呢?當(dāng)然不是,實(shí)際上,任何頁面元素都可以提交表單,不過嘛,都是通過腳本來完成的,下面我們就使用鏈接來代替Submit按鈕:
樣例21:用鏈接來提交表單
分析:
通過onClick="document.form.submit()"來提交表單;用onClick="document.form.reset()"來復(fù)位表單,這樣一來,任何一個(gè)元素都可以實(shí)現(xiàn)提交表單了。
