最近發現使用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,后面都帶有一個參數,這個參數值是當前系統時間或是一個隨機參數的一個數,這樣做是為了避免瀏覽器的從它的緩存中讀取響應信息,影響結果的正確性。


           

          posts - 146, comments - 143, trackbacks - 0, articles - 0

          Copyright © flustar

          主站蜘蛛池模板: 织金县| 平泉县| 垣曲县| 雷波县| 织金县| 理塘县| 普安县| 邮箱| 龙岩市| 临西县| 闸北区| 施甸县| 诸暨市| 石城县| 阜南县| 沾益县| 赤壁市| 兴宁市| 江津市| 上蔡县| 鹤岗市| 穆棱市| 临城县| 怀来县| 洛扎县| 清远市| 舒城县| 天津市| 腾冲县| 南昌市| 灌南县| 西安市| 巴彦淖尔市| 启东市| 长寿区| 秀山| 揭西县| 子洲县| 永年县| 彭泽县| 阳朔县|