jQuery表单验证插件——Validation

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>jQuery Validation 插件</title>
    <link rel="stylesheet" href="css/style.css"/>
</head>
<body>
<form id="demoForm">
    <fieldset>
        <legend>用户登录</legend>
        <p id="info"></p>
        <p id="info2" style="display:none">输入错误</p>

        <p>
            <label for="username">用户名</label>
            <input type="text" id="username" name="username"/>
        </p>

        <p>
            <label for="password">密码</label>
            <input type="password" id="password" name="password"/>
        </p>

        <p>
            <label for="confirm-password">确认密码</label>
            <input type="password" id="confirm-password" name="confirm-password"/>
        </p>

        <p>
            <button id="check">检查表单</button>
            <input type="submit" value="登录"/>
        </p>
    </fieldset>
</form>

<script src="js/jquery-1.10.0.js"></script>
<script src="js/jquery.validate-1.13.1.js"></script>
<script>
    var validator;//需要在控制台调用
    $(document).ready(function(){

        validator = $("#demoForm").validate({
            debug:true,
            rules:{
                username:{
                    required:true,//必填
                    minlength:2,//最小长度
                    maxlength:10//最大长度
                },
                password:{
                    required:true,
                    minlength:2,
                    maxlength:16
                },
                "confirm-password":{
                    equalTo:"#password"
                }
            },
            messages:{//自定义提示信息
                 username:{
                    required:"必须填写用户名",
                    minlength:"用户名最小为2位",
                    maxlength:"用户名最大为10位"
                },
                password:{
                    required:"必须填写密码",
                    minlength:"密码最小为2位",
                    maxlength:"密码最大为16位"
                },
                "confirm-password":{
                    equalTo:"两次输入的密码不一致"
                }
            },
            /*groups:{
                login:"username password confirm-password"
            },
            errorPlacement:function(error,element){
            error.insertBefore("#info"); 
            },*/

            /*errorContainer:"#info2",
            errorLabelContainer:"#info",//错误信息放在#info里面
            errorElement:"li",//用li标签标记
            wrapper:"ul"//用ul标签将li包裹起来*/

            /*showErrors:function(errorMap,errorList){
                console.log(errorMap);
                console.log(errorList);
                this.defaultShowErrors();//如果不写就没有默认的错误提示信息
            }*/

           /* highlight:function(element,errorClass,validClass){
                $(element).addClass(errorClass).removeClass(validClass);
                $(element).fadeOut().fadeIn();
            },
            unhighlight:function(element,errorClass,validClass){
                $(element).addClass(errorClass).removeClass(validClass);
            },*/

        });

        /*$.validator.addMethod("postcode",function(value,element,params){
                var postcode = /^[0-9]{6}$/;//六位0-9的数字
                return this.optional(element) || (postcode.test(value));//this.optional(element)表示在没有填写值的时候返回true,(postcode.test(value))表示在符合要求时返回true,不写前者表示此项必填
            },$.validator.format("请填写正确的{0}邮编!"));*/

        $("#check").click(function(){
            alert($("#demoForm").valid() ? "输入信息正确!" : "输入信息不正确!");
        });
    });
</script>

</body>
</html>


关于标签的一些问题:

1、fieldset标签

定义和用法

fieldset 元素可将表单内的相关元素分组。

<fieldset> 标签将表单内容的一部分打包,生成一组相关表单的字段。

当一组表单元素放到 <fieldset> 标签内时,浏览器会以特殊方式来显示它们,它们可能有特殊的边界、3D 效果,或者甚至可创建一个子表单来处理这些元素。

<fieldset> 标签没有必需的或唯一的属性。


2、legend标签

定义和用法

legend 元素为 fieldset元素定义标题(caption)。

例:



关于插件:

1、首先Validation插件是表单验证插件,所有一定是form表单。


2、如果输入不正确或不输入,input会自动添加error样式,且自动添加label标签。


   <p>
            <label for="username">用户名</label>
            <input type="text" id="username" name="username"/>
   </p>


开始:


错误输入:


正确输入:


3、不懂这种写法?input[type=submit]表示设置提交按钮的样式?
input[type=submit], button {
    margin-top: 20px;
    font-size: 36px;
    padding: 10px 0;
}

4、label标签的for属性
for 属性规定 label 与哪个表单元素绑定。
隐式和显式的联系
标记通常以下面两种方式中的一种来和表单控件相联系:将表单控件作为标记标签的内容,这样的就是隐式形式,或者为 <label> 标签下的 for 属性命名一个目标表单 id,这样就是显式形式。



5、rule规则中定义的username和password对应的是name属性值不是id属性值。


6、validate是插件的核心方法,定义一些基本的校验规则和一些有用的配置项。
   例如:debug: true表示表单不会提交,只进行检查。


7、remote远程校验,比如判断用户名是否存在
rules: {
                username: {
                    required: true,//必填
                    minlength: 2,
                    maxlength: 10,
 remote:"remote.json"  //json字符串中返回false,默认get方法提交
                }
 }
messages:{//自定义提示信息
                 username:{
                    required:"必须填写用户名",
                    minlength:"用户名最小为2位",
                    maxlength:"用户名最大为10位",
 remote:"用户名不存在"
   }
   实际后台代码中可以进行对数据库的操作。


   也可以设置post请求:
 rules: {
                username: {
                    required: true,//必填
                    minlength: 2,
                    maxlength: 10,
       remote:{
 url:"remote.json",//链接
 type:"post",//提交方式
 data:{//提交数据,默认提交username,也可以提交其他的数据
    loginTime:function(){
  return +new Date;//相当于Date对象调用getTime()方法,返回一个long型的毫秒数时间
}
 }
       }
}
  }


问题:XMLHttpRequest cannot load file,不能加载json?
大概是因为必须从localhost打开?


return +new Date;?
+是一个转换符,是转换为字符串,还是转换为数字,要看加号前后的数据类型,如果都是数字,自然结果还是数字,如果一个是数字一个是字符串就会转换为字符串,像这里加号左边没有任何东西,那么加号的作用就是试着将右边的时间类型转换为数字,有getTime()方法,自然能够转换成数字。


8、rangelength,长度范围
minlength: 2,
      maxlength: 10
   可以写成
rangelength:[2,10]
   message中的写法:
      rangelength:"用户名应该在2-10位"


  对比min、max、range:
      min:2,
max:10
  是指输入的值在2-10之间,相应range也是这个意思。


9、dateISO 标准日期格式:年-月-日 或 年/月/日
   dateISO:true
   2016-10-03


10、其他验证方法:
    number:数字(number:true)
    digits:整数(digits:true)
    equalTo:与其他数值一致


    "confirm-password":{
        equalTo:"#password"
     }
    因为中间有连字符,所以用引号引入,equalTo后的值是要比较的选择器的值。


11、valid():检查表单或某些元素是否有效
    $("#check").click(function(){
        alert($("#demoForm").valid() ? "输入信息正确!" : "输入信息不正确!");
    });


12、rules():获取表单元素的校验规则
    rules(“add”,“rules”):向表单元素增加校验规则
    rules(“remove”,rules):删除表单元素校验规则


    $("#username").rules("add",{minlength:2,maxlength:10})
    $("#username").rules("remove","minlength maxlength")
    注意:rules()获取的是某个表单元素的校验信息,获取整个表单的校验信息会报错。


13、validator对象
    validate方法返回validator对象
    validator.form():验证表单是否有效,返回true/false
    控制台:validator.form() -> false


    validator.element(element):验证某个元素是否有效,返回true或false
    控制台:validator.element("#username") -> false


    validator.resetForm():把表单恢复到验证前的状态
    validator.showErrors(errors):针对某个元素显示特定的错误信息
    控制台:validator.showErrors({
  username:"你填错了!",
        password:"密码也错了!"
})


    validator.numberOfInvals():返回无效的元素数量
    控制台:validator.numberOfInvals() -> 2(什么都不填)


14、validator对象一些静态方法,可以直接使用
    jQuery.validator.setDefaults(options):修改插件默认设置
    将所有表单设置debug为true:
    $.validator.setDefaults({ debug:true });


    jQuery.validator.addClassRules(name,rules):为某些包含名为name的class增加组合验证类型
    去除required方法,加上class=“txt”
    $.validator.addClassRules({
    txt:{
  required:true,
         minlength:5
}
    })


15、validate方法配置项:rules
    举例:如果密码没有填写,那么用户名也不需要填写
    rules: {
                username: {
                    required:{
     depends:function(element){
                            return $("#password").is(":filled");//密码是否被填写
                         }
  },
                    minlength: {
                        param:2,
                        depends:function(element){
                            return $("#password").is(":filled");
                        }//如果$("#password").is(":filled")为true,参数被传入
                    },
                    maxlength: 10
            }


16、validate方法配置项:ignore,对某些元素不进行校验
    默认值:ignore:":hidden" 不对隐藏的元素进行校验
    ignore:"#username" 登录时不再进行校验


17、validate配置项:groups,对一组元素的验证,用一个错误提示,用errorPlacement控制把出错信息放在哪里。
    在表单中加入一个p标签,
    <p id="info"></p>
    处理错误信息:
    groups:{
login:"username password confirm-password"
    },
    errorPlacement:function(error,element){
    error.insertBefore("#info"); //将错误信息添加到#info前面
    }



18、validate配置项:
    onsubmit,是否在登录时进行验证。
    例:onsubmit:false  不进行验证,默认是true


    onfocusout:是否在获取焦点时验证
    onkeyup:是否在敲击键盘时验证
    onclick:是否在鼠标点击时验证,一般用于checkbox或者radio
    focusInvalid:提交表单后,未通过验证的表单(第一个或提交之前获得焦点的未通过验证的表单)是否会获得焦点
    focusCleanup:当未通过验证的元素获得焦点时,是否移除错误提示


    errorClass:指定错误提示的css类名,可以自定义错误提示的样式
    validClass:指定验证通过的css类名
    例: errorClass:"wrong",
         validClass:"right"


    errorElement:使用什么标签标记错误
    wrapper:使用什么标签把上边的errorElement包起来
    errorLabelContainer:把错误信息统一放在一个容器里面
    errorContainer:显示或者隐藏验证信息,可以自动实现有错误信息出现时把容器属性变为显示,无错误时隐藏
    例:
 errorContainer:"#info2",//有错误信息时显示,没有则不显示
 errorLabelContainer:"#info",//错误信息放在#info里面
          errorElement:"li",//用li标签标记
          wrapper:"ul"//用ul标签将li包裹起来



    showErrors:可以显示总共有多少个未通过验证的元素
    例:
        showErrors:function(errorMap,errorList){
             console.log(errorMap);
             console.log(errorList);
             this.defaultShowErrors();//如果不写就没有默认的错误提示信息
        }


    errorPlacement:自定义错误信息放到哪里
    success:要验证的元素通过验证后的动作
    例:success:"right"
            或
           success:function(label){
           label.addClass("rrrrright");
        }


    highlight:出错时触发
    unhighlight:通过验证时触发,一般和highlight同时使用
    例:
         highlight:function(element,errorClass,validClass){
             $(element).addClass(errorClass).removeClass(validClass);
             $(element).fadeOut().fadeIn();//未通过时淡入淡出
         },
         unhighlight:function(element,errorClass,validClass){
             $(element).addClass(errorClass).removeClass(validClass);
             //通过时移除样式
         },


19、选择器扩展
    :blank  选择所有值为空的元素
    :filled  选择所有值不为空的元素
    :unchecked  选择所有没有被选中的元素


20、自定义验证方法
    jQuery.validator.addMethod{name,method[,mesage]}
    name:方法名称
    method:function{value,element,params} 方法逻辑
    message:提示消息
    例:
       $.validator.addMethod("postcode",function(value,element,params){
             var postcode = /^[0-9]{6}$/;//六位0-9的数字
             return this.optional(element) || (postcode.test(value));
            },"请填写正确的邮编!");


       rules:{
                username:{
                    required:true,//必填
                    //minlength:2,//最小长度
                    //maxlength:10//最大长度
                    postcode:true
              }
     注意:this.optional(element)表示在没有填写值的时候返回true,也就是说在没有输入时不进行验证,不写前者表示不输入也进行验证,也就是此项必填,(postcode.test(value))表示在符合要求时返回true。return的值为false则显示提示信息。


    additional-methods.js  validate插件本身提供了这个js文件,包含了很多扩展验证方法
    例:
 $.validator.addMethod("postcode",function(value,element,params){
             var postcode = /^[0-9]{6}$/;//六位0-9的数字
             return this.optional(element) || (postcode.test(value));},$.validator.format("请填写正确的{0}邮编!"));
     
    给rules中的postcode传参:postcode:“中国”
    传入的参数显示在{0}的位置


21、关于安全性
    在数据被输入程序前必须对数据的合法性进行检验。非法输入问题是最常见的web应用程序安全漏洞。
    所有提交的表单数据,都必须验证两次,即提交前在客户端验证,提交后在服务器端再次验证,保证数据的合法性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值