<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    春風(fēng)博客

    春天里,百花香...

    導(dǎo)航

    <2008年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統(tǒng)計(jì)

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(224)

    隨筆檔案(126)

    個(gè)人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    通用化Web表單驗(yàn)證方式的改進(jìn)方案



    本文是“表單驗(yàn)證方式的通用化”的續(xù)篇。

    在上文的表單驗(yàn)證解決方案中,有這樣幾個(gè)問題:
    1。頁面中存在自定義標(biāo)簽,這通不過W3C驗(yàn)證。
    2。自定義標(biāo)簽不能寫在Struts標(biāo)簽中,造成此解決方案在Struts工程中不適用。
    3。驗(yàn)證的方式和頁面內(nèi)容混合在一起,沒有分開。
    4。原反饋信息span的id必須符合一定規(guī)范,這是額外的負(fù)擔(dān)。

    為了解決這些問題,我采取了如下步驟:
    1。建立一種數(shù)據(jù)結(jié)構(gòu),讓它容納文本框id,反饋span的id,驗(yàn)證正則表達(dá)式,是否必須輸入等四個(gè)信息。這樣頁面就不會(huì)混雜自定義標(biāo)簽,w3c驗(yàn)證和struts標(biāo)簽不支持的問題就解決了。
    2。建立一個(gè)包含多個(gè)這種數(shù)據(jù)結(jié)構(gòu)的數(shù)組,其中元素與要驗(yàn)證的文本域一一對應(yīng)。此數(shù)組在需要驗(yàn)證時(shí)建立。這里雖然要多些一些JS代碼,但驗(yàn)證信息更集中更容易修改了。
    3。需要驗(yàn)證時(shí)取得數(shù)組元素,挨個(gè)驗(yàn)證即可,需要的信息都可以從數(shù)組元素中取得。整個(gè)過程可以庫化通用化,頁面不需要寫驗(yàn)證。

    如此做完后,我認(rèn)為原先的問題基本得到解決了。下面請看具體代碼:

    1。頁面代碼。
                      <!-- 調(diào)用通用驗(yàn)證函數(shù)checkForm -->
                      
    <form action="ShowPage" onsubmit="return checkForm(getCheckArray());">
                      
    <!-- 內(nèi)置表格開始 -->
                      
    <table width=660 align=center border=0>
                        
    <tbody>
                          
    <tr>
                            
    <td width=70>姓名:</td>
                            
    <td>
                                
    <input type="text" 
                                       name
    ="name" 
                                       onfocus
    ="this.style.backgroundColor='#e6e6e6'" 
                                       onblur
    ="this.style.backgroundColor='#ffffff'"/>
                                
    <font color=red>&nbsp;(必填)</font>
                                
    <span id="nameMsg" class="feedbackHide">用戶名必須輸入兩到三位漢字</span>
                            
    </td>
                          
    </tr>
                          
    <tr>
                            
    <td width=70>職位:</td>
                            
    <td>
                                
    <input type="text" 
                                       name
    ="title" 
                                       onfocus
    ="this.style.backgroundColor='#e6e6e6'" 
                                       onblur
    ="this.style.backgroundColor='#ffffff'" />
                                
    <font color=red>&nbsp;(必填)</font>
                                
    <span id="titleMsg" class="feedbackHide">員工職位必須是二到五位漢字</span>
                            
    </td>
                          
    </tr> 
                          
    <tr>
                            
    <td width=70>年齡:</td>
                            
    <td>
                                
    <input type="text" 
                                       name
    ="age" 
                                       onfocus
    ="this.style.backgroundColor='#e6e6e6'" 
                                       onblur
    ="this.style.backgroundColor='#ffffff'" />
                                
    <span id="ageMsg" class="feedbackHide">員工年齡在20到59之間</span>
                            
    </td>
                          
    </tr>
                          
    <tr>
                            
    <td width=70>密碼:</td>
                            
    <td>
                                
    <input type="password" 
                                       name
    ="pswd" 
                                       onfocus
    ="this.style.backgroundColor='#e6e6e6'" 
                                       onblur
    ="this.style.backgroundColor='#ffffff'" />
                                
    <font color=red>&nbsp;(必填)</font>
                                
    <span id="pswdMsg" class="feedbackHide">員工密碼必須是英語或數(shù)字</span>
                            
    </td>
                          
    </tr> 
                          
    <tr>
                          
    <td width=70>郵件:</td>
                            
    <td>
                                
    <input type="text" 
                                       name
    ="email" 
                                       onfocus
    ="this.style.backgroundColor='#e6e6e6'" 
                                       onblur
    ="this.style.backgroundColor='#ffffff'" />
                                
    <font color=red>&nbsp;(必填)</font>
                                
    <span id="emailMsg" class="feedbackHide">輸入必須符合郵件地址格式,如XX@XXX.XX</span>
                            
    </td>
                          
    </tr>  
                          
    <tr>
                            
    <td></td>
                            
    <td><input type="submit" value="錄入"/></td>
                          
    </tr>

                        
    </tbody>          
                      
    </table>
                      
    </form>
                      
    <!-- 內(nèi)置表格結(jié)束-->

    2。驗(yàn)證時(shí)創(chuàng)建數(shù)組的函數(shù),注意其與頁面元素的對應(yīng)關(guān)系。
    <script LANGUAGE="JavaScript">
    <!--
    /**
    * 取得需要驗(yàn)證的文本框控件數(shù)組
    *
    */

    function getCheckArray(){
        
    var arr=new Array();
        
        arr[
    0]=createToBeCheckedObj("name","nameMsg","[\\u4E00-\\u9FA5]{2,3}","true");
        arr[
    1]=createToBeCheckedObj("title","titleMsg","[\\u4E00-\\u9FA5]{2,5}","true");
        arr[
    2]=createToBeCheckedObj("age","ageMsg","[2-5]{1}[0-9]{1}","false");
        arr[
    3]=createToBeCheckedObj("pswd","pswdMsg","\\w+","true");
        arr[
    4]=createToBeCheckedObj("email","emailMsg","\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*","true");

        
    return arr;
    }

    //-->
    </script>

    3。創(chuàng)建驗(yàn)證數(shù)據(jù)結(jié)構(gòu)的函數(shù)
    /**
    * Check a object will be checked when sbmit a form
    */

    function createToBeCheckedObj(textboxName,msgSpanId,validChar,isRequired){
        
    // Create the object will be checked
        var toBeCheckedObj=new Object;
        
        
    // Set propertied to toBeCheckedObj
        toBeCheckedObj.textboxName=textboxName;
        toBeCheckedObj.msgSpanId
    =msgSpanId;
        toBeCheckedObj.validChar
    =validChar;
        toBeCheckedObj.isRequired
    =isRequired;
        
        
    // create a method of toBeCheckedObj
        toBeCheckedObj.showProperties=function(){
            alert(
    "TextboxName="+this.textboxName+" MsgSpanId="+this.msgSpanId+" ValidChar="+this.validChar+" IsRequired"+this.isRequired);
        }

     
        
    // return the object will be checked
        return toBeCheckedObj;
    }

    4。驗(yàn)證函數(shù)

    /**
    * Check form
    */

    function checkForm(toBeCheckedObjArray){
        
        
    for(var i=0;i<toBeCheckedObjArray.length;i++){
            
    var    toBeCheckedObj=toBeCheckedObjArray[i];    
            
    // toBeCheckedObj.showProperties();
            
            
    var checkResult=checkTextBox(toBeCheckedObj);
            
            
    if(checkResult){
                document.getElementById(toBeCheckedObj.msgSpanId).className
    ="feedbackHide";
            }

            
    else{        
                document.getElementById(toBeCheckedObj.msgSpanId).className
    ="feedbackShow";
                document.getElementById(toBeCheckedObj.textboxName).focus();
                
    return false;
            }
                    
        }

     
         
    // alert("all passed");
        return true;
    }


    /**
    * Check text field in the form
    */

    function checkTextBox(toBeCheckedObj){
        
    var validChar=toBeCheckedObj.validChar;
        
    var isRequired=toBeCheckedObj.isRequired;
        
    var inputValue=document.getElementById(toBeCheckedObj.textboxName).value;
        
        
    if(isRequired!="true" && inputValue.length<1){
            
    return true;
        }

        
    else{
            
    var regexStr="^"+validChar+"$";
            
    var regex=new RegExp(regexStr);
            
    return regex.test(inputValue);
        }

    }

    5。驗(yàn)證效果



    以上,歡迎提出寶貴意見,在此感謝對前兩篇拙文提出寶貴建議的同仁。

    代碼下載:
    http://www.tkk7.com/Files/sitinspring/JsFormChecker20080521125711.rar

    posted on 2008-05-21 14:09 sitinspring 閱讀(3780) 評論(7)  編輯  收藏 所屬分類: Web開發(fā)JavaScript

    評論

    # re: 通用化Web表單驗(yàn)證方式的改進(jìn)方案 2008-05-21 19:01 基金凈值

    正是我需要的,謝謝!  回復(fù)  更多評論   

    # re: 通用化Web表單驗(yàn)證方式的改進(jìn)方案 2008-05-21 19:10 HiMagic!

    你可以用google搜一下form通用驗(yàn)證,好像是叫validator什么的,他使用了html tag的擴(kuò)展屬性,應(yīng)該比你的方案更好。此外,該方案完全丟棄了server端驗(yàn)證。  回復(fù)  更多評論   

    # re: 通用化Web表單驗(yàn)證方式的改進(jìn)方案 2008-05-21 20:31 如坐春風(fēng)

    @HiMagic!

    謝謝提示,有空我會(huì)去看的。 我這個(gè)方案也全是Client端的。
      回復(fù)  更多評論   

    # re: 通用化Web表單驗(yàn)證方式的改進(jìn)方案 2008-05-23 10:41 大牙

    如果你希望使用一個(gè)完善的Web頁面驗(yàn)證框架,建議還是去google搜索下載“我佛山人”的Validator。現(xiàn)在最新好像是4.0。十分好用,強(qiáng)烈推薦,呵呵~~  回復(fù)  更多評論   

    # re: 通用化Web表單驗(yàn)證方式的改進(jìn)方案 2008-05-23 13:17 如坐春風(fēng)

    @大牙

    謝謝推薦。
      回復(fù)  更多評論   

    # re: 通用化Web表單驗(yàn)證方式的改進(jìn)方案 2008-09-05 13:14 小數(shù)

    感覺頁面上的東西太多了  回復(fù)  更多評論   

    # re: 通用化Web表單驗(yàn)證方式的改進(jìn)方案 2008-09-05 21:53 尋道者

    @小數(shù)

    是還有改進(jìn)的余地。
      回復(fù)  更多評論   

    sitinspring(http://www.tkk7.com)原創(chuàng),轉(zhuǎn)載請注明出處.
    主站蜘蛛池模板: 成年女人免费碰碰视频| 亚洲熟妇中文字幕五十中出| 亚洲欧洲精品久久| 日本免费一区二区久久人人澡| 亚洲 自拍 另类小说综合图区 | 亚洲中文字幕在线观看| 午夜在线免费视频| 亚洲成人一区二区| 亚洲日本在线看片| 四虎成年永久免费网站| 亚洲国产区男人本色在线观看| 在线a人片天堂免费观看高清| 亚洲精华国产精华精华液网站| 亚洲第一区精品观看| 深夜福利在线视频免费| 亚洲中久无码永久在线观看同| 光棍天堂免费手机观看在线观看| 亚洲gv猛男gv无码男同短文| 5555在线播放免费播放| 精品丝袜国产自在线拍亚洲| 免费一级毛片清高播放| 99久久婷婷免费国产综合精品| 久久亚洲精品人成综合网| 国产麻豆视频免费观看| 麻豆亚洲AV永久无码精品久久| 色影音免费色资源| 国产精品亚洲专区无码牛牛| 成人免费一级毛片在线播放视频| 亚洲欧洲无码一区二区三区| 亚洲国产成人精品女人久久久 | 午夜毛片不卡免费观看视频| 黄页免费视频播放在线播放| 亚洲国产婷婷六月丁香| 国产精彩免费视频| 免费精品国自产拍在线播放| 亚洲AV无码第一区二区三区| 在线免费观看毛片网站| 少妇性饥渴无码A区免费| 亚洲乱码在线播放| 在线观看视频免费完整版| 一个人免费播放在线视频看片|