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

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

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

    張慧的博客

    張慧的博客

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

    本人的重點(diǎn)是怎么構(gòu)建一個(gè)簡(jiǎn)單有效可擴(kuò)展的jQuery表單驗(yàn)證插件,這篇文章沒(méi)有教你怎么用 validate plugin。我們的重點(diǎn)在學(xué)習(xí)一些jQuery,Javascript面向?qū)ο缶幊痰闹R(shí)。

    下面是一個(gè)完整的html頁(yè)面代碼,可以直接運(yùn)行測(cè)試的。

    <html>

    <head>
    <title>jQuery用面向?qū)ο蟮乃枷雭?lái)編寫(xiě)驗(yàn)證表單的插件</title>


    <style type="text/css">

    form {margin:2em 0;}
    input {font-family:sans-serif; font-size:1.4em; padding:4px;}
    label {display: block; margin-bottom:2px; font-size:1.4em;}
    fieldset input {width: 225px; margin-bottom: 5px;}
    legend {font-weight:bold; font-size:1.4em;}
    fieldset { padding:2em; border: 1px solid #ccc;}
    input[type=submit] {margin-top:0.5em;}

    .error input {border:1px solid red;}
    .errorlist {margin:0; color: red; margin-bottom:10px;}

    #valid-form {margin:5px 0; display: block; color:green;}

    </style>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
    </script>

    <script type="text/javascript">

    (
    function($) {
        
    /*
        Validation Singleton
        
    */
        
    var Validation = function() {
            
            
    var rules = {
                
                email : {
                   check: 
    function(value) {
                       
                       
    if(value)
                           
    return testPattern(value,"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])");
                       
    return true;
                   },
                   msg : 
    "Enter a valid e-mail address."
                },
                url : {

                   check : 
    function(value) {

                       
    if(value)
                           
    return testPattern(value,"^https?://(.+\.)+.{2,4}(/.*)?$");
                       
    return true;
                   },
                   msg : 
    "Enter a valid URL."
                },
                required : {
                    
                   check: 
    function(value) {

                       
    if(value)
                           
    return true;
                       
    else
                           
    return false;
                   },
                   msg : 
    "This field is required."
                }
            }
            
    var testPattern = function(value, pattern) {

                
    var regExp = new RegExp(pattern,"");
                
    return regExp.test(value);
            }
            
    return {
                
                addRule : 
    function(name, rule) {

                    rules[name] 
    = rule;
                },
                getRule : 
    function(name) {

                    
    return rules[name];
                }
            }
        }
        
        
    /* 
        Form factory 
        
    */
        
    var Form = function(form) {
            
            
    var fields = [];
        
            form.find(
    "[validation]").each(function() {
                
    var field = $(this);
                
    if(field.attr('validation') !== undefined) {
                    fields.push(
    new Field(field));
                }
            });
            
    this.fields = fields;
        }
        Form.prototype 
    = {
            validate : 
    function() {

                
    for(field in this.fields) {
                    
                    
    this.fields[field].validate();
                }
            },
            isValid : 
    function() {
                
                
    for(field in this.fields) {
                    
                    
    if(!this.fields[field].valid) {
                
                        
    this.fields[field].field.focus();
                        
    return false;
                    }
                }
                
    return true;
            }
        }
        
        
    /* 
        Field factory 
        
    */
        
    var Field = function(field) {

            
    this.field = field;
            
    this.valid = false;
            
    this.attach("change");
        }
        Field.prototype 
    = {
            
            attach : 
    function(event) {
            
                
    var obj = this;
                
    if(event == "change") {
                    obj.field.bind(
    "change",function() {
                        
    return obj.validate();
                    });
                }
                
    if(event == "keyup") {
                    obj.field.bind(
    "keyup",function(e) {
                        
    return obj.validate();
                    });
                }
            },
            validate : 
    function() {
                
                
    var obj = this,
                    field 
    = obj.field,
                    errorClass 
    = "errorlist",
                    errorlist 
    = $(document.createElement("ul")).addClass(errorClass),
                    types 
    = field.attr("validation").split(" "),
                    container 
    = field.parent(),
                    errors 
    = []; 
                
                field.next(
    ".errorlist").remove();
                
    for (var type in types) {

                    
    var rule = $.Validation.getRule(types[type]);
                    
    if(!rule.check(field.val())) {

                        container.addClass(
    "error");
                        errors.push(rule.msg);
                    }
                }
                
    if(errors.length) {

                    obj.field.unbind(
    "keyup")
                    obj.attach(
    "keyup");
                    field.after(errorlist.empty());
                    
    for(error in errors) {
                    
                        errorlist.append(
    "<li>"+ errors[error] +"</li>");        
                    }
                    obj.valid 
    = false;
                } 
                
    else {
                    errorlist.remove();
                    container.removeClass(
    "error");
                    obj.valid 
    = true;
                }
            }
        }
        
        
    /*
        Validation extends jQuery prototype
        
    */
        $.extend($.fn, {
            
            validation : 
    function() {
                
                
    var validator = new Form($(this));
                $.data($(
    this)[0], 'validator', validator);
                
                $(
    this).bind("submit"function(e) {
                    validator.validate();
                    
    if(!validator.isValid()) {
                        e.preventDefault();
                    }
                });
            },
            validate : 
    function() {
                
                
    var validator = $.data($(this)[0], 'validator');
                validator.validate();
                
    return validator.isValid();
                
            }
        });
        $.Validation 
    = new Validation();
    })(jQuery);


    </script>

    <script>
                        
                        
    $(
    function(){ // jQuery DOM ready function.

        
    var myForm = $("#demo-form");

        myForm.validation();

        
    // We can check if the form is valid on
        // demand, using our validate function.
        $("#btn_submit").click(function() {

            
    if(!myForm.validate()) {

                myForm.append(
    "<strong id='valid-form'>Form is valid!</strong>");
            }
        });
        
                        
    });
     
    </script>
     
     
    </head>
    <body>
        
        <div class="wapper">
            <div class="content">
                 <h2>Demo</h2><div class="article-demo">
                    <form action="#demo-form" id="demo-form"> 
                        <fieldset>
                            <legend>Test fields</legend>
                            <div>
                                <label for="demo-field-1">Required field</label>
                                <input id="demo-field-1" validation="required" name="demo-field-1" type="text" />
                            </div>
                            <div>
                                <label for="demo-field-2">Email field</label>
                                <input id="demo-field-2" validation="email" name="demo-field-2" type="text" />
                            </div>
                            <div>
                                <label for="demo-field-3">URL field</label>
                                <input id="demo-field-3" validation="url" name="demo-field-3" type="text" />
                            </div>
                        </fieldset>
                        <div class="submit-area">
                            <input value="Validate!" type="submit" id="btn_submit" />
                        </div>  
                    </form>
            </div>
        </div>
    </body>

    posted on 2012-07-12 22:24 張慧 閱讀(2480) 評(píng)論(1)  編輯  收藏

    Feedback

    # re: jQuery用面向?qū)ο蟮乃枷雭?lái)編寫(xiě)驗(yàn)證表單的插件 2015-10-19 09:36 8465
    959859+  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 9久热精品免费观看视频| 亚洲日本国产精华液| a级毛片毛片免费观看永久| 特级毛片A级毛片免费播放| 久久精品亚洲中文字幕无码麻豆| 久久影视综合亚洲| 国产午夜亚洲精品理论片不卡| 毛茸茸bbw亚洲人| 亚洲精品成人网久久久久久| 免费观看黄色的网站| 欧洲一级毛片免费| 在线观看AV片永久免费| 午夜视频免费在线观看| 99在线免费观看视频| xxxx日本免费| 夭天干天天做天天免费看| 久久99热精品免费观看动漫| 国产精品免费大片| 黄 色一级 成 人网站免费| 中文字幕免费视频精品一| 久久福利青草精品资源站免费| 免费无码VA一区二区三区| 四虎1515hh永久久免费| 大陆一级毛片免费视频观看i| 国产大片51精品免费观看| 久久精品国产亚洲5555| 亚洲国产女人aaa毛片在线| 亚洲国产精品久久久久秋霞影院| 高清在线亚洲精品国产二区| aa级一级天堂片免费观看| 午夜视频在线在免费| 亚洲精品国产va在线观看蜜芽| 亚洲中文字幕无码一区| 亚洲精品免费观看| 亚洲影院天堂中文av色| 一级特黄a大片免费| 中文字幕免费在线| 成人免费无码精品国产电影| 亚洲线精品一区二区三区| 亚洲韩国在线一卡二卡| 国产精品无码亚洲精品2021|