張慧的博客

          張慧的博客

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

          本人的重點是怎么構建一個簡單有效可擴展的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 {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 張慧 閱讀(2484) 評論(1)  編輯  收藏

          Feedback

          # re: jQuery用面向對象的思想來編寫驗證表單的插件 2015-10-19 09:36 8465
          959859+  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 和田县| 马边| 富蕴县| 济南市| 太湖县| 高碑店市| 固原市| 新绛县| 湘潭市| 射阳县| 石泉县| 鄂伦春自治旗| 霍邱县| 荆门市| 梧州市| 桃园县| 奉化市| 吉水县| 安庆市| 克东县| 富阳市| 双城市| 阳高县| 和田市| 宁南县| 武宁县| 元江| 文昌市| 凌云县| 盘锦市| 疏附县| 水城县| 虹口区| 香格里拉县| 双流县| 库尔勒市| 孝感市| 武功县| 育儿| 宜都市| 昭平县|