亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

用ASP動態生成JavaScript的表單驗證代碼

2019-11-18 20:14:59
字體:
來源:轉載
供稿:網友
表單的驗證是開發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的驗證代碼:

<script language=javascript>
<!--
//Power by xiaotian 2002
function checkSubmit()
{
if ((document.form1.name.value)=='')
{
window.alert ('姓名必須填寫');
document.form1.name.select();
document.form1.name.focus();
return false;
}
else
return true;
}
//-->
</script>

<form name="form1" onsubmit="javascript:return checkSubmit()">
<input type="text" name="name">
</form>

這段代碼是驗證表單form1的name表單項,必須填寫內容。這里就有幾個關鍵的部分:表單域名稱、表單項名稱、判斷語句;這些就是我們下面編寫ASP函數的關鍵了。

2、如何生成JavaScript代碼。最簡單的,就是用Response.Write輸出了,比如把上面代碼輸出就可以是:

<%
Response.Write "<script language=javascript>"&vbCrlf&_
       "<!--"&vbCrlf&_
       "//Power by xiaotian 2002"&vbCrlf&_
       "function checkSubmit()"&vbCrlf&_
       "{"&vbCrlf&_
       "if ((document.form1.name.value)=='')"&vbCrlf&_
       "{"&vbCrlf&_
       "window.alert ('姓名必須填寫');"&vbCrlf&_
       "document.form1.name.select();"&vbCrlf&_
       "document.form1.name.focus();"&vbCrlf&_
       "return false;"&vbCrlf&_
       "else"&vbCrlf&_
       "return true;"&vbCrlf&_
       "}"&vbCrlf&_
       "//-->"&vbCrlf&_
       "</script>"&vbCrlf&_
%>

這里的vbCrlf是一個回車換行,&是連接符,&_是代碼換行連接的字符。

3、這段代碼的頭和尾是基本固定不變的,變化的是中間的if判斷部分,我們可以先把這部分寫成函數,小田已經寫好一個了,大家可以參考一下,下面是代碼:

Function findJS(frmName,errStr)
Dim tmpArr
Dim i
'參數值
i=0
'獲取錯誤列表,建立數組
tmpArr=Split(errStr,"|")
'輸出查詢條件
Select Case tmpArr(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&_
"return false;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"return true;"&vbCrlf
Exit Function
Case "1" '必填的ListMenu類型
findJS="if ((document."&frmName&"."&tmpArr(i)&".value)=="""")"&vbCrlf&_
"{"&vbCrlf&_
"window.alert ('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"return false;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"return true;"&vbCrlf
Exit Function
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&_
"return false;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"return true;"&vbCrlf
Exit Function
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&_
"return false;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"return true;"&vbCrlf
Exit Function
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&_
"return false;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"return true;"&vbCrlf
Exit Function
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&_
"return false;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"return true;"&vbCrlf
Exit Function
Case "6" '必須為a-z或0-9的字符的Text類型
findJS="if ((!pwdReg.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&_
"return false;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"return true;"&vbCrlf
Exit Function
Case "7" '確認密碼和密碼必須相等的Text類型
findJS="if ((document."&frmName&"."&tmpArr(i)&".value)!=(document."&frmName&"."&tmpArr(i+3)&".value))"&vbCrlf&_
"{"&vbCrlf&_
"window.alert ('"&tmpArr(i+2)&"');"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".select();"&vbCrlf&_
"document."&frmName&"."&tmpArr(i)&".focus();"&vbCrlf&_
"return false;"&vbCrlf&_
"}"&vbCrlf
'"else"&vbCrlf&_
'"return true;"&vbCrlf
Exit Function
End Select
End Function


其中參數frmName是指表單域的名稱,而errStr是表單項+判斷類型+出錯提示的一個數組,其語法為:

"表單項名稱1|判斷類型1|出錯提示1|[可選參數1],表單項名稱2|判斷類型2|出錯提示2|[可選參數2],..."
表單項名稱:例如name等,是自定義的
判斷類型:就是Case語句里的0,1,2,3等等
出錯提示:例如 姓名必須填寫 等,是自定義的
可選參數:比如在判斷確認密碼和密碼必須相等的Text類型時,可選參數就是想要判斷相當的密碼表單項名稱;在必須為指定位數的Text類型時,可選參數就是指定的位數。當然可以選參數可以是好幾個,具體就看你Case語句里的if是怎么編的了。

這里已經羅列了8種不同的情況的if判斷語句,大家可以繼續添加上去,注意這里的幾個特別的部分,比如序號5email格式的判斷(emailReg.test),這里用到了正則表達式,而正則表達式的定義,我們可以統一放在if判斷的外面。

4、函數CheckForm_JS(frmName,errStr)。這個函數的作用是最后將一個個JavaScript的if判斷整合起來,代碼如下:

Sub CheckForm_JS(frmName,errStr)
Dim tmpArr
Dim i
Dim strShow '輸出JS的字符串
'獲取錯誤列表,建立數組
tmpArr=Split(errStr,",")
'寫JS
for i=0 to UBound(tmpArr)
if i<>0 then
strShow=strShow&"else "&findJS(frmName,tmpArr(i))
else
strShow=strShow&findJS(frmName,tmpArr(i))
end if
next
'輸出
strShow="<script language=javascript>"&vbCrlf&_
"<!--"&vbCrlf&_
"//Power by xiaotian 2002"&vbCrlf&_
"function checkSubmit()"&vbCrlf&_
"{"&vbCrlf&_
"var emailReg = /^[_a-z0-9]+@([_a-z0-9]+/.)+[a-z0-9]{2,3}$/;"&vbCrlf&_
"var pwdReg = /[a-z0-9]$/;"&vbCrlf&_
strShow&_
"else"&vbCrlf&_
"return true;"&vbCrlf&_
"}"&vbCrlf&_
"//-->"&vbCrlf&_
"</script>"
Response.Write strShow
End Sub

大家注意到這里的一段:

if i<>0 then
strShow=strShow&"else "&findJS(frmName,tmpArr(i))
else
strShow=strShow&findJS(frmName,tmpArr(i))
end if

作用是把第1個以后JavaScript的if語句寫成else if,而

"var emailReg = /^[_a-z0-9]+@([_a-z0-9]+/.)+[a-z0-9]{2,3}$/;"&vbCrlf&_
"var pwdReg = /[a-z0-9]$/;"&vbCrlf&_

段代碼就是正則表達式的定義了,大家可以根據需要擴充。

5、使用方法。我們可以把這2段函數寫在一個文件里,比如CheckForm_JS.asp,然后在要使用的頁調用,比如:

<!--#include file="checkform_js.asp" -->
<%
Call checkform_js("frm","name|0|姓名必須填寫,number|2|編號必須是數字,number|3|編號指定為6位數|6,email|5|email的格式不正確")
%>

<form name="frm" onsubmit="javascript:return checkSubmit()">
姓名:<input type="text" name="name">
編號:<input type="text" name="number">
email:<input type="text" name="email">
<input type="submit" name="submit" value="提交">
</form>

在實際的使用中,errStr可能會是很長的字符串,書寫中我們可以用一斷行的方法寫,比如上面的errStr我們可以這樣寫:

<%
Dim errStr
errStr="name|0|姓名必須填寫,"&_
   "number|2|編號必須是數字,number|3|編號指定為6位數|6,"&_
   "email|5|email的格式不正確"
Call checkform_js("frm",errStr)
%>

注意:由于函數中數組的分隔符是"|"和",",所以,errStr中的錯誤提示不能使用這2個字符,大家可以用全角的來代替。

6、代碼運行情況。以上代碼運行后,就可以得到下面的JavaScript:

<script language=javascript>
<!--
//Power by xiaotian 2002
function checkSubmit()
{
var emailReg = /^[_a-z0-9]+@([_a-z0-9]+/.)+[a-z0-9]{2,3}$/;
var pwdReg = /[_a-z0-9]$/;
if ((document.frm.name.value)=="")
{
window.alert ('姓名必須填寫');
document.frm.name.select();
document.frm.name.focus();
return false;
}
else if (isNaN(document.frm.number.value))
{
window.alert ('編號必須是數字');
document.frm.number.select();
document.frm.number.focus();
return false;
}
else if (document.frm.number.value.length=6)
{
window.alert ('編號指定為6位數');
document.frm.number.select();
document.frm.number.focus();
return false;
}
else if ((!emailReg.test(document.frm.email.value))&&(document.frm.email.value!=''))
{
window.alert ('email的格式不正確');
document.frm.email.select();
document.frm.email.focus();
return false;
}
else
return true;
}
//-->
</script>

  熟悉JS的朋友可以自己擴充這個函數,相信可以滿足大家的驗證要求了。

函數打包下載:http://www.10fber.com/mylesson/asp2js/checkform_js.zip

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久综合九色九九| 国产精品欧美在线| 亚洲bt欧美bt日本bt| 日韩在线视频观看正片免费网站| 一区二区中文字幕| 91在线免费观看网站| 国产精品久久久久久久久借妻| 一区二区日韩精品| 国产主播欧美精品| 97免费中文视频在线观看| 日韩精品一区二区视频| 欧美日韩午夜视频在线观看| 日本欧美在线视频| 久久国产精品电影| 欧美特黄级在线| 日产精品久久久一区二区福利| 欧美日韩国产精品一区二区三区四区| 国产在线精品成人一区二区三区| 午夜精品福利视频| 一区二区欧美久久| 中文字幕在线日韩| 国产成人精品在线| 成人444kkkk在线观看| 国产区精品在线观看| 国产极品jizzhd欧美| 国产精品美女免费看| 欧美做受高潮1| 91亚洲午夜在线| 亚洲第一在线视频| 日韩免费高清在线观看| 欧美日韩精品在线视频| 国产精品视频区| 午夜欧美不卡精品aaaaa| 国产区精品视频| 久久天天躁狠狠躁夜夜躁2014| 日韩精品在线私人| 欧美大秀在线观看| 国产成人中文字幕| 在线播放日韩欧美| 日韩中文av在线| 久久精品欧美视频| 亚洲午夜精品久久久久久性色| 国产丝袜一区视频在线观看| 国产小视频91| 国产亚洲美女久久| 亚洲精品第一页| 日韩av在线网页| 欧美激情一区二区三区高清视频| 欧美丰满少妇xxxxx| 亚洲女人天堂网| 成人日韩在线电影| 91免费欧美精品| 久热99视频在线观看| 伊人久久久久久久久久| 国产精品美乳在线观看| 国产精品视频最多的网站| 91精品视频免费观看| 亚洲一区中文字幕在线观看| 97国产精品视频| 成人国产精品免费视频| 久青草国产97香蕉在线视频| 国产精品久久久久久久久久新婚| 久久国产一区二区三区| 亚洲欧洲在线免费| 欧美激情精品久久久久久变态| 久久人人爽人人爽爽久久| 亚洲一区二区三区xxx视频| 亚洲一区二区三区视频| 韩国三级日本三级少妇99| 91精品国产综合久久久久久久久| 亚洲欧美国产一本综合首页| 欧美日韩亚洲激情| 久久精品国产欧美激情| 欧美人与性动交a欧美精品| 国产精品成人av性教育| 成人精品在线视频| 亚洲精品电影网站| 亚洲欧洲午夜一线一品| 欧美成人午夜激情| 亚洲电影中文字幕| 午夜精品久久久久久久白皮肤| 欧美日韩久久久久| 色综合天天综合网国产成人网| 欧美极品少妇全裸体| 68精品久久久久久欧美| 日韩hd视频在线观看| 欧美老少做受xxxx高潮| 国产精品av在线播放| 欧美在线日韩在线| 久久精品国产欧美亚洲人人爽| 精品久久久久久中文字幕一区奶水| 日韩免费在线观看视频| 亚洲精品网址在线观看| 97超碰蝌蚪网人人做人人爽| 成人在线视频网| 久久精品国产91精品亚洲| 欧美日韩在线观看视频小说| 欧美日韩日本国产| 国产69精品久久久久99| 国产亚洲人成a一在线v站| 欧美黄色片免费观看| 欧美一区二区大胆人体摄影专业网站| 亚洲精品久久久久中文字幕二区| 精品视频久久久| 欧美激情精品久久久久久久变态| 国产精品入口夜色视频大尺度| 欧美日韩美女在线观看| 亚洲bt天天射| 欧美在线播放视频| 日韩av中文在线| 亚洲精品按摩视频| 亚洲精品黄网在线观看| 久久久久国产视频| 97久久超碰福利国产精品…| 国产婷婷97碰碰久久人人蜜臀| 红桃av永久久久| 国产精品国模在线| 欧美最猛性xxxx| 国产在线拍揄自揄视频不卡99| 欧美性猛交xxxx富婆弯腰| 国产中文字幕91| 国产在线98福利播放视频| 久久99热精品| 亚洲人成网7777777国产| 欧美精品videofree1080p| 国产午夜精品美女视频明星a级| 精品欧美aⅴ在线网站| 狠狠做深爱婷婷久久综合一区| 亚洲美女激情视频| 欧美精品在线免费播放| 久久久精品久久久久| 成人免费激情视频| 亚洲网站在线播放| 欧美激情精品久久久久久免费印度| 欧美国产日产韩国视频| 欧美中文在线观看国产| 欧美乱妇40p| 一区二区三区回区在观看免费视频| 成人黄色免费看| 91精品久久久久久久久久另类| 久久亚洲精品毛片| 日韩精品中文字幕在线观看| 成人高h视频在线| 国产精品444| 国语自产在线不卡| 亚洲精品一区久久久久久| 亚洲福利视频免费观看| 国产日韩在线看| 亚洲无限乱码一二三四麻| 精品夜色国产国偷在线| 日韩成人激情视频| 91亚洲精品一区| 亚洲欧洲高清在线| 亚洲xxxx3d| 亚洲国产99精品国自产| 亚洲欧美国产一本综合首页| 亚洲人成免费电影| 97久久国产精品| 日韩中文在线视频| 91在线免费网站| 最近2019年好看中文字幕视频| 国产精欧美一区二区三区| 欧美猛男性生活免费| 亚洲精品久久久久久久久久久久|