最近發現使用prototype來做表單的前臺驗證感覺非常不錯,prototype.js 是由 Sam Stephenson 寫的一個 javascript 類庫。這個構思奇妙,而且
兼容標準的類庫,能幫助你輕松建立有高度互動的 Web 2.0 特性的富客戶端頁面。下面是一個使用它做前臺表單驗證的例子。
var flag=[true,true,true,true,true,true,true,true,true,true];
var userNameInfo=["用戶名不能為空","用戶名必須為6~20位","用戶已存在","恭喜用戶名可以使用"];
var passwordInfo=["密碼不能為空","密碼長度不能小于6位","請再次輸入密碼","兩次密碼輸入不一致,請重新輸入"];
function changeImage()
{
var timenow=new Date().getTime();
$('checkcode').src = "image/loading.gif";
$('checkcode').src = "random.jsp?d="+timenow;
}
function checkUserName()
{
if ($F("userName").match(/^\s*$/g)) {
$("userNameErr").innerHTML =userNameInfo[0];
flag[0]=false;
}else{
var re=/^(\w){6,20}$/;
var tt = re.test($F("userName"));
if(tt==false){
$("userNameErr").innerHTML = userNameInfo[1];
flag[0]=false;
}else{
$("userNameErr").innerHTML = "<img src='image/loading.gif'>";
isExsitUsername();
}
}
}
function checkPassword()
{
if ($F("password").match(/^\s*$/g)) {
$("pwdErr").innerHTML =passwordInfo[0];
flag[1]=false;
}else if($F("password").length<6){
$("pwdErr").innerHTML=passwordInfo[1];
flag[1]=false;
}else{
$("pwdErr").innerHTML="";
flag[1]=true;
}
}
function checkRePassword(){
if ($F("password2").match(/^\s*$/g)) {
$("repwdErr").innerHTML =passwordInfo[2];
flag[2]=false;
}else if($F("password2")!=$F("password")){
$("repwdErr").innerHTML=passwordInfo[3];
flag[2]=false;
}else{
$("repwdErr").innerHTML="";
flag[2]=true;
}
}
function checkName(){
if($F("name").match(/^\s*$/g)){
$("nameErr").innerHTML="昵稱不能為空";
flag[3]=false;
}else{
$("nameErr").innerHTML="";
flag[3]=true;
}
}
function checkQuestion(){
if($F("question").match(/^\s*$/g)){
$("questionErr").innerHTML="請選擇一個安全問題";
flag[4]=false;
}else{
$("questionErr").innerHTML="";
flag[4]=true;
}
}
function checkAnswer(){
if($F("answer").match(/^\s*$/g)){
$("answerErr").innerHTML="安全回答不能為空";
flag[5]=false;
}else if($F("answer").length<4){
$("answerErr").innerHTML="安全回答問題不能少于4個字符";
flag[5]=false;
}else{
$("answerErr").innerHTML="";
flag[5]=true;
}
}
function checkEmail()
{
var reEmail =/(\S)+[@]{1}(\S)+[.]{1}(\w)+/;
if($F("email").match(/^\s*$/g)){
$("emailErr").innerHTML="Email不能為空";
flag[6]=false;
}else{
var temp=reEmail.test($("email").value);
if(temp==false){
$("emailErr").innerHTML= "Email必須符合要求!";
flag[6]=false;
}else{
$("emailErr").innerHTML="<img src='image/loading.gif'>";
isExsitEmail();
}
}
}
function checkMobile(){
var patrn=/^(?:13\d|15[89])-?\d{5}(\d{3}|\*{3})$/;
if($F("mobile").match(/^\s*$/g)){
$("mobileErr").innerHTML="";
flag[7]=true;
}else{
if (!patrn.test($F("mobile"))) {
$("mobileErr").innerHTML="請輸入正確的手機號碼";
flag[7]=false;
}else{
$("mobileErr").innerHTML="";
flag[7]=true;
}
}
}
function checkPID(){
var patrn=/(^\d{15}$)|(^\d{17}([0-9]|X|x)$)/;
if($F("PID").match(/^\s*$/g)){
$("PIDErr").innerHTML="";
flag[8]=true;
}else{
if (!patrn.test($F("PID")))
{
$("PIDErr").innerHTML="身份證號碼有誤!";
flag[8]=false;
}else{
$("PIDErr").innerHTML="";
flag[8]=true;
}
}
}
function isExsitUsername(){
var username=$F("userName");
var url='user_checkUsername.do';
var pars="username="+username;
var usernameAjax=new Ajax.Request(
url,
{method:'get',parameters:pars,onComplete:showUResult}
);
}
function showUResult(result){
if(result.responseText.indexOf("true")!=-1){
$("userNameErr").innerHTML=userNameInfo[2];
flag[0]=false;
}else{
$("userNameErr").innerHTML="<font color='green'>"+userNameInfo[3]+"</font>";
flag[0]=true;
}
}
function isExsitEmail(){
var email=$F("email");
var url='user_checkEmail.do';
pars="email="+email;
var emailAjax=new Ajax.Request(
url,
{method:'get',parameters:pars,onComplete:showEResult}
);
}
function showEResult(result){
if(result.responseText.indexOf("true")!=-1){
$("emailErr").innerHTML="這個Email已經有人使用,請換一個";
flag[6]=false;
}else{
$("emailErr").innerHTML="<font color='green'>已通過驗證</font>";
flag[6]=true;
}
}
function checkCode(){
if($("code").value.match(/^\s*$/g)){
$("codeErr").innerHTML="驗證碼不能為空";
flag[9]=false;
}else{
isCorrectCode();
}
}
function isCorrectCode(){
var code=$F("code");
var url='checkcode.jsp';
pars="code="+code+"&ram="+Math.random();
var codeAjax=new Ajax.Request(
url,
{method:'get',parameters:pars,asynchronous:false,onComplete:showCResult}
);
}
function showCResult(result){
if(result.responseText.indexOf("validate_successful")!=-1){
$("codeErr").innerHTML="";
flag[9]=true;
}else{
$("codeErr").innerHTML="錯誤的驗證碼";
flag[9]=false;
}
}
function checkform(){
checkUserName();
checkPassword();
checkRePassword();
checkName();
checkQuestion();
checkAnswer();
checkEmail();
checkMobile();
checkPID();
checkCode();
for(var i=0;i<flag.length;i+=1){
if(flag[i]==false)
return false;
}
return true;
}
其中
$(): 函數是在 DOM 中使用過于頻繁的 document.getElementById() 方法的一個便利的簡寫,就像這個 DOM 方法一樣,這個方法返回參數傳入的 id 的那個元素。
$F() :函數是另一個大收歡迎的“快捷鍵”,它能用于返回任何表單輸入控件的值,比如文本框或者下拉列表。這個方法也能用元素 id 或元素本身做為參數。
Ajax.Request 類:如果你不使用任何的幫助程序包,你很可能編寫了整個大量的代碼來創建 XMLHttpRequest 對象并且異步的跟蹤它的進程,然后解析響應并處理它。當你不需要支持多于一種類型的瀏覽器時你會感到非常的幸運,反之你就要考慮使用prototype的Ajax.Request類。你也許注意到了在使用它做無刷新驗證用戶名,Email以及驗證碼時,使用'get'方法把參數傳遞給url,后面都帶有一個參數,這個參數值是當前系統時間或是一個隨機參數的一個數,這樣做是為了避免瀏覽器的從它的緩存中讀取響應信息,影響結果的正確性。