zoukankan      html  css  js  c++  java
  • jQuery.validator详解二

    1.插件结构(组织方式)

    var plugFn=function($){

      $.extend($.fn,{

        //验证form表单

        validate:function(options){

          //实例化$.validator对象

          var validator=new $.validator(options,this[0]);

          this.onsubmit(function(){

            if(validator.form()){

              return true;

            }

            return false;

          });

        },

        //获取元素的验证规则,需要逐一验证

        rules:function(command,argument){

          //...

        }

      });

      //构造函数

      $.validator=function(options,form){

        this.settings=$.extend(true,{},$.validator.defaults,options);

        this.currentForm=form;

        this.init();

      };

      $.extend($.validator,{

        defaults:{},

        setDefaults:function(settings){},

        prototype:{

          init:function(){},

          form:function(){},

          checkform:function(){},

          elements:function(){},

          check:function(element){},

          showErrors:function(errors){},

          valid:function(){

            return this.size()===0;

          },

          size:function(){

            return this.errorList.length;

          }

        }

      });

    }

    //为了兼容requiredjs,将代码包装如下:

    (function(factory){

      if(typeof define ==="function" && defineamd){

        define(["jquery"],factory);

      }else{

          factory(jQuery);

        }

    }(plugFn));

    2.如何对表单元素验证:

    验证的触发方式:

    1.表单提交:将会对所有不是可选的表单元素进行验证

    2.当触发focusout事件,且表单元素value不为空,则会对事件目标元素进行验证

    3.当触发focusin事件,且在focusout事件中对目标元素验证过,才会在focusin事件中对目标元素进行验证

    如何验证:

    首先取元素的匹配规则,然后轮询匹配规则,进行验证

    $(ele).rules();

    validator.check(ele);

    3.配置对象

    {

      errorClass:"error",         //消息错误提示容器,验证未通过的表单元素的 classaName

      validClass:"valid",

      errorElement:"label",

      ...

     };

    }

     //自定义你的错误消息提示:

    $.validator.messages={

      required:"输入不能为空",

      remote:"用户名已经存在",

      email:"请输入一个有效的电子邮件地址",

      ...

      }

    直接看代码吧!

    $.validator.format=function(source,params){

      //只传递了一个参数

      if(arguments.length ===1){

        //返回一个匿名函数,调用的时候肯定会带上参数的,

        return function(){

          var args=$.makeArray(arguments);

          //将source插入到最前面

          args.unshift(source);

          //如果匿名函数带上了参数,将会执行$.validator.format后面的部分代码了,否则永远都是执行前面的代码

          return $.validator.format.apply(this.args);

        };

      }

      //参数个数大于2,如: $.validator.format(source,10,20)

      if(arguments.length>2 && params.constructor !== Array){

        params=$.makeArray(arguments).slice(1);

      }

      //参数个数等于2,如:$.validator.format(source,10)

      if(params.constructor !== Array){

        params=[params];

      }

      //将 {0} 或 {1} 替换成真正的实参

      $.each(params,function(i,n){

        source=source.replace(new RegExp("\{"+i+"\}","g"),function(){

        return n;

        });

      });

      return source;

    };

  • 相关阅读:
    Flask-wtforms 组件
    flask-session
    [架构漫谈]软件架构师如何工作
    [Python]爬取新型冠状病毒2.2至今的所有数据 python 2020.2.13
    [Python]爬取首都之窗百姓信件网址id python 2020.2.13
    假期学习【十三】信息领域热词分析系统--整体完成
    假期学习【十二】热词分析系统--初步展示
    [Python]python对csv去除重复行 python 2020.2.11
    pip工具下载速度慢的问题
    [Python]pyhon去除txt文件重复行 python 2020.2.10
  • 原文地址:https://www.cnblogs.com/csli/p/6762388.html
Copyright © 2011-2022 走看看