zoukankan      html  css  js  c++  java
  • jQuery用面向对象的思想来编写验证表单的插件

    本人的重点是怎么构建一个简单有效可扩展的jQuery表单验证插件,这篇文章没有教你怎么用 validate plugin。我们的重点在学习一些jQuery,Javascript面向对象编程的知识。

    下面是一个完整的html页面代码,可以直接运行测试的。

    <html>

    <head>
    <title>jQuery用面向对象的思想来编写验证表单的插件</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 { 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>

  • 相关阅读:
    太白老师 day06 编码 encode decode
    太白老师day6 1.代码块 2.is==id 3.小数据池
    MySQL 基本语法(1.表字段操作,2表记录管理 3.运算符管理4.SQL查询 5.约束6.索引
    List 接口常用子类及其特点
    Java 集合框架
    Java 常用工具类之基本对象包装类
    Java 常用工具类之 String 类
    Java 多线程间通信
    Java 多线程通信之多生产者/多消费者
    Java 之多线程通信(等待/唤醒)
  • 原文地址:https://www.cnblogs.com/ranzige/p/4065221.html
Copyright © 2011-2022 走看看