前端领域技术笔录资料整理随笔日志

jQuery表单验证插件Validation的使用.

FavoriteLoadingAdd to favorites

引言:在使用jQuery的Web项目中,最基础的就是表单的验证,而且使用比较多的插件应该是jQuery Validation了。其实这个插件早就用过了,最近项目中有人问相关的问题,趁此机会来总结一下这个插件的常用API,也便于以后自己查看。最后以项目中“表单的新增和修改场景”举例,以源码DEMO的形式为你阐释具体的使用方式,也欢迎大家各抒己见,互相交流。

 
简介
 
   该插件的作用主要就是用于浏览器端的表单验证,基本上可以满足多数的表单验证,同时官方网站还提供了扩展验证方法,也提供了国际化的配置。据说该插件是jQuery开发组组长开发,具有很好的评价。
 
准备
 
请到官网首页(官方地址:http://jqueryvalidation.org/)下载相关支持压缩包,博主这里使用版本jquery-validation-1.13.1(当前该插件版本是1.14.0)。
因为其是基于jQuery实现的,自然在我们的页面中需要引入jquery来支持,同时引入该插件的文件。如下:
<script src=”build/jquery-1.10.0.js”></script>
<script src=”build/jquery.validate-1.13.1.js”></script>
 
概念
 
1. rule:验证规则,就是为指定的表单元素设置验证的规则。如:
    比如页面上有一个文本框,其name属性值为username,且是必填项,如下设置即可,
    rules: {
        username: {
            required: true
        }
    }
 
2. method:即验证的方法,其实就是实现规则的方法。
比如上方的必填,就是实现required方法了,用于检查元素的值是否符合必填这个规则。
 
 
常见的验证
 
1. required
    作用:验证必填
    常见书写方式:required: true
 
2. remote
    作用:远程验证,比如提交一个学生信息时,需要验证其学号是否唯一,需要发送请求至后台进行查询验证。
    常见书写方式:
        remote:{
            url: “test.json”,
            type:”post”,
            dataType:”json”,
            data:{
                name: function(){
                    return jQuery(“#name”).val();
                }
            }
        }
 
3. minlength
    作用:设置最小长度,用于限制表单元素的字符最小长度。
    常见书写方式:minlength:5
 
4. maxlength
    作用:设置最大长度,用于限制表单元素的字符最大长度。
    常见书写方式:maxlength:100
 
5. rangelength
    作用:设置一个长度的范围,即设置最小长度和最大长度,介于两者之间。
    常见书写方式:rangelength: [8,20]
 
6. min  
    作用:设置最小值,限制表单元素的最小值。
    常见书写方式:min:5
 
7. max
    作用:设置最大值,限制表单元素的最大值。
    常见书写方式:max:10
 
8. range
    作用:设置一个值的范围,即设置表单元素的最小值和最大值,介于两者之间。
    常见书写方式:range:[5,10]
 
9. email
    作用:验证是否为emaile格式,如 abc@126.com。
    常见书写方式:email:true
 
10. url
    作用:验证是否为url格式,必须要包含http://,如 http://www.baidu.com。
    常见书写方式:url:true
 
11. date
    作用:验证是否为日期格式。这种日期检验比较宽泛,支持很多形式,这里就不列举了。注意不支持IE6。
    常见书写方式:date:true
 
12. dateISO 
    作用:验证是否为ISO日期格式。例如:2009-06-231998/01/22 只验证格式,不验证有效性。
    常见书写方式:dateISO:true
 
13. number
    作用:验证是否为number格式,合法的数字(负数,小数)
    常见书写方式:number:true
 
14. digits
    作用:验证是否为整数格式。
    常见书写方式:digits:true
 
15. equalTo
    作用:验证是否与指定的元素相等。
    常见书写方式:
        password:{
            required:true,
            rangelength:[8,20]
        },
        conformPwd:{
            required:true,
            rangelength:[8,20],
            equalTo:”#password”
        }

16. creditcard

    作用:必须输入合法的信用卡号。
    常见书写方式:creditcard:true
 
17. accept
    作用:请输入拥有合法后缀名的字符串。
    常见书写方式:accept:true
 
以上列举一些常用的验证和其常用的使用方式,一般足够用于验证了。当然如果不能满足您的需求,您可以扩展实现。
 
验证信息提示(Message)
 
插件默认的提示信息英文的,一般需要自定义来写,官方网站以及很多博客资料中(见本文下方的参考资料)都有这么一段,用于设置插件全局的提示信息,代码如下:
$.extend($.validator.messages, {
    required: “必选字段”,
    remote: “请修正该字段”,
    email: “请输入正确格式的电子邮件”,
    url: “请输入合法的网址”,
    date: “请输入合法的日期”,
    dateISO: “请输入合法的日期 (ISO).”,
    number: “请输入合法的数字”,
    digits: “只能输入整数”,
    creditcard: “请输入合法的信用卡号”,
    equalTo: “请再次输入相同的值”,
    accept: “请输入拥有合法后缀名的字符串”,
    maxlength: $.validator.format(“请输入一个长度最多是 {0} 的字符串”),
    minlength: $.validator.format(“请输入一个长度最少是 {0} 的字符串”),
    rangelength: $.validator.format(“请输入一个长度介于 {0} 和 {1} 之间的字符串”),
    range: $.validator.format(“请输入一个介于 {0} 和 {1} 之间的值”),
    max: $.validator.format(“请输入一个最大为 {0} 的值”),
    min: $.validator.format(“请输入一个最小为 {0} 的值”)
});
这样就会把默认的英文换成中文了。
 
不过,是否需要添加这一块全局设置代码,请根据需求来正确使用。该全局设置是非必须的,因为这个国际化的中文信息,只能用于一般的字段填写的理解上,与你当前的业务很多是不符合的,或者说很多信息提示也不到位,不能共用的。
 
Validate方法、Validator对象及相关方法简介
 
1. Validate方法
 
Validate是该插件的核心方法,主要用于初始化对应的表单对象,并且返回Validator对象,在该方法中可以定义表单的校验规则和常见的配置项。同时只要表单运行了该方法,后面调用这个表单对象和表单元素对象时,就拥有了Validator对象的方法了,该说明后面可以从DEMO中看出。
 
(1) debug
    用于配置,表单提交时,只进行验证检查,但不提交表单。一般设置为true,提交表单的处理交给submitHandler方法来实现即可。
 
(2) rules
    用于定义校验的规则。
 
(3) messages
    用于定义验证的提示信息。
 
(4) submitHandler
    该方法执行于,所有的表单元素验证通过之后。其中主要实现提交之后的操作,一般就用于表单的提交。
 
(5) invalidHandler
    该方法执行于,表单元素没有验证通过之后,其中可以输出相关的验证未通过信息等。
 
(6) showErrors
    用于配置,用于显示未验证通过的元素。
 
(7) errorPlacement
    用于自定义错误信息的显示容器。
 
(8) success
    执行于,表单验证通过之后。可以对表单的显示,表单联动处理等,做相关操作。
 
(9) highlight
    用于给未通过的元素添加高亮效果。
 
(10) unhighlight
    用于去除未通过的元素的高亮效果。
 
(11) ignore
    用于配置对指定的元素不进行验证。注意:该参数默认值为“hidden”,即不验证隐藏的元素。
 
(12) focusInvalid
    表示在提交表单时,未通过的验证的表单元素,是否需要获得焦点。
 
(13) focusCleanup
    表示当未通过验证的元素获得焦点时,是否移除错误的信息。
 
(14) groups
    用于将一组元素的验证信息,使用一个错误提示合起来显示,一般需要使用errorPlacement来控制,将错误信息放到指定位置。
 
(15) onsubmit
    表示是否在提交时进行验证。
 
(16) onfocusout
    表示是否在获取焦点时进行验证。
 
(17) onkeyup
    表示是否在敲击键盘时进行验证。
 
(18) errorClass
    用于指定错误提示的css类名,在此处可以进行自定义错误样式。
 
(19) validClass
    用于指定验证通过的css类名。
 
(20) errorElement
   用于指定使用什么标签(常用div,列表形式使用li),来标记错误信息。
 
(21) wrapper
    用于指定使用什么标签把errorElement包起来。(如使用ul标签,可以与errorElement使用li标签,配合使用,展示为列表形式)
 
(22) errorLabelContainer
    用于将错误信息统一放置到指定的容器内,容器一般在页面上已存在。
 
(23) errorContainer
    用于显示和隐藏验证的信息,可以做自定义的实现。
 
2. Validator对象
 
Validator对象是Validate方法返回而来,下面简介一下高对象的相关的方法。
 
(1) Validator.form()
    验证表单是否符合规则,包含所有表单元素的验证,返回true/false。
 
(2) Validator.element(element)
    验证某个元素是否符合验证规则,返回true/false。
 
(3) Validator.resetForm()
    恢复表单的验证状态,即将已显示的验证信息去除,这个方法需要掌握,一般用在表单的置空时。
 
(4) Validator.showErrors(errors)
    针对某个元素显示特定的错误信息。
 
(5) Validator.numberOfInvalids()
    返回无效的元素数量。
 
以下是插件Validator对象的静态方法
 
(1) jQuery. validator.addMethod()
    增加自定义的验证方法。官方提供了additional-methods.js,用于扩展验证等。
 
(2) jQuery. validator.format()
    格式化字符串,用参数代替模板中的{n}。
 
(3) jQuery. validator.setDefault(options)
    修改插件的默认设置。
 
(4) jQuery. validator.addClassRules(name,rules)
    为某些包含名为name的class增加组合验证类型。
 
3. valid方法
 
    该方法用于检查表单或其中的元素,是否符合所有的验证。
 
4. rules方法(常用)
 
(1) rules():用于获取表单元素的校验规则
(2) rules(“add”,rules):用于对指定的表单元素增加校验规则
(3) rules(“remove”,rules):删除表单元素的校验规则
 
选择器的扩展和自定义验证方法
 
扩展的选择,主要如下:
(1) :blank,选择所有值为空的元素
(2) :filled,选择所有值不为空的元素
(3) :unchecked,选择所有没有选中的元素
 
自定义验证方法大家自行找资料实现吧,网上资料也很多。
 
博主认为,常用的表单验证已经够用了,如果有特殊需求,应该靠自己去写验证,只要在提交前加上自己的验证就行,不需要太过依赖插件。
另外,简单的验证,或者后台系统使用该插件还是轻便的,如果具有复杂表单业务,如OA类的系统,其实到不建议使用插件,应该自己去实现相关的验证。
 
实战示例
 
场景描述:
增删改查是每个系统必备的操作。示例主要就实现一下,会员信息的录入功能,包含增加和修改的功能。
 
要求:
新增的时候表单为空,会员登录名、昵称等必填字段,且都有长度限制,会员登录名需要发送至服务器进行验证是否重复等;
修改时,先获取服务端的参数并填写至表单,且会员登录名不能修改(且此时不用验证会员登录名是否重复,因为服务端已存在),其他条件一致。
 
下面简单说一下思路:

1. 首先页面上模拟两个操作点,一个“新增”和一个“修改”。新增时,需要验证登录名是否存在;修改时,需要先获取数据,但不需要验证登录名存在与否。
2. 新增,需要如下的步骤。
(1) 恢复表单的验证状态,
 validator.resetForm();
(2) 使用表单元素的rules方法来新增规则,如下:
$(“#loginName”).rules(“add”,{
    remote: {
        url: “checkName.json”,
        type:”post”,
        dataType:”json”,
        data:{
            loginName: function(){
                return jQuery(“#loginName”).val();
            }
        }
    }
});
(3) 重置表单
document.getElementById(“memberFormNode”).reset();
3. 修改时,操作类似,但需要将新增时的第二步,改成去除规则,如下:
$(“#loginName”).rules(“remove”,”remote”);
 
示例说明:
 
(1)使用了BootStrap样式表美化了页面。
(2)由于在checkName.json中设置为false,所以新增时,登录名验证的时候永远是“已存在”。
(3)在getMember.json中默认填写了表单相关的属性值,真实项目中需从服务端获取。
 
具体请下载源码查看,DEMO(stark-jquery-validation-demo)示例下载。
 
如有问题,欢迎指出;如需转载,请标明出处,谢谢!
 
 
参考资料