在做项目时,我们不仅要在服务器端进行一些验证,一般也在要客户端进行验证,这样才能以最快的时间将一些错误反馈给用户,让用户不必在点击了提交按钮后才得知自己录入错了一些东西。以前我在项目中处理客户端验证都是基于正则表达式自己写验证函数,感觉用起来比较费劲,所以这次在项目中应用了一下jquery.validation,感觉挺好的。下面将使用过程中的一些小知识记录下来:
说明:
- 提交表单,并进行验证,这时第一个示通过验证的表单元素会获得焦点。
- 当验证失败后,这时如果元素的值发生变化会自动进行验证,而不是像第一次一样需要提交表单来触发验证。
validation插件中的选择项:
- debug:true不会提交表单
如果一个页面中有多个表单,可以在$.validator.setDefaults中设置用
$.validator.setDefaults({
debug: true
}) - submitHandler:function 通过验证后运行的函数,里边要加上表单提交的函数,否则表单不会提交,对于在asp.net项目中应用了jquery.vilidation后导致按钮不起作用的问题可以看这篇文章
- ignore: 忽略对某个元素的验证.
- rules:自定义规则,key:value的形式,key是要验证的元素,value可以是字符串或对象,后边会有几个例子说明
message:自定义的提示信息key:value的形式key是要验证的元素,值是字符串或函数,后边有几个例子说明 - groups:对一组元素的验证,用一个错误提示.
- onsubmit: false意思是说不进行验证了?用其它方式进行验证
- onfocusout: false意思是说,在未标记为未通过验证之前,不出现提示
加不加这样的区别[在未标记为未通过验证之前]:
不加时,当你在一个元素有输入,但不合法时,这个元素blur时会有提示出现
加了后: 不会出现提示 - onkeyup作用不大
onclick,与checkbox,radiobox验证有关 - focusInvalid: false
前边说过,提交表单后,未通过验证的表单(第一个或提交之前获得焦点的未通过验证的表单)会获得焦点
这个选择加了以后,没有元素会获得焦点 - focusCleanup: true
当未通过验证的元素获得焦点时,移除错误提示 - errorClass:指定错误提示的css类名,可以自定义错误提示的样式
- errorElement: "em"用什么标签标记错误,默认是label
- wrapper: 用什么标签再把上边的errorELement包起来
- errorLabelContainer:把错误放到期里指定的元素里
- errorContainer:用处不大
- showErrors:跟一个函数,可以显示总共有多少个未通过验证的元素
- errorPlacement:跟一个函数,可以自定义错误放到哪里
- success:要验证的元素通过验证后的动作,如果跟一个字符串,会当做一个css类,也可跟一个函数
- highlight:可以给未通过验证的元素加效果,闪烁等
validation插件方法
- validate 上边说的选项就是为它服务的
- valid 作用不大,就是都通过验证结果为true
- rules( ) 返回指定元素的验证规则,返回一个对象
- rules("add",rules)添加规则,例
$("#username").rules("add",{
required:true
})
这个比较有用,如果一个表单在不同的地方需要不同的验证方法,可以用这临时加上验证规则 - rules( "remove",rules)移除验证规则,只能移除在validdate中加的或通过add加的,就是说
不能移除在元素中直接写的,如class="required" - removeAttrs:移除属性,前边的rules("remove":rules),不能移除在元素里直接写的class="required"
这个方法不是用来完成这点的
validation插件中自定义的选择符
- :blank 表单中所有空白值的元素
- :filled 有值的元素
- :unchecked 与jquery中的:checked相反
validation插件中提供的一个实用方法
- jQuery.format(tempalte,arg1,arg2...)
用后边的arg1 arg2等代替template中的{0},{1}等 - addMethod( name, method, message)
参数name是添加的方法的名字
参数method是一个函数,接收三个参数(value,element,param) value是元素的值,element是元素本身 param是参数,我们可以用addMethod来添加除built-in Validation methods之外的验证方法 比如有一个字段,只能输一个字母,范围是a-f,写法如下
$.validator.addMethod("af",function(value,element,params){
if(value.length>1){
return false;
}
if(value>=params[0] && value<=params[1]){
return true;
}else{
return false;
}
},"必须是一个字母,且a-f");
用的时候,比如有个表单字段的id="username",则在rules中写
username:{
af:["a","f"]
}
addMethod的第一个参数,就是添加的验证方法的名子,这时是af
addMethod的第三个参数,就是自定义的错误提示,这里的提示为:"必须是一个字母,且a-f"
addMethod的第二个参数,是一个函数,这个比较重要,决定了用这个验证方法时的写法
如果只有一个参数,直接写,如果af:"a",那么a就是这个唯一的参数,如果多个参数,用在[]里,用逗号分开
validation插件的内置验证方式
- required:true 必须有值
- required:"#aa:checked"表达式的值为真,则需要验证
- required:function(){}返回为真,表时需要验证 后边两种常用于表单中需要同时填或不填的元素
- remote:url这个比较有用,可以用于判断注册用户等是否已经存在,服务器端输出true,表示验证通过
- minlength:最小长度,这个用于text,验证不通过会提示错误的,这里主要说一下checkbox,我测试的时候,错误提示并不是跟在几个checkbox的最后边,比如
<input type="checkbox" name="checkbox[]" id="checkbox" value="c"/>
<input type="checkbox" name="checkbox[]" id="checkbox" value="d"/>
验证用:
"checkbox[]":{
required:true,
minlength:2
}
错误提示会跟在第一个checkbox后边,这时候可以用配置选项中的errorPlacement来定位置
errorPlacement:function(error, element){
if(element.attr("name") == "checkbox[]"){
error.appendTo("#checkwrong");//指定一个你想放的位置
}else{
error.insertAfter(element)
}
} - maxlength
- rangelength
- min
- max
- range这几个用法和minlength差不多
- email:验证邮件
- url:这没什么好说的
- date,dateISO,dateDE 主要用于验证日期
- digits:只能是数字
- creditcard:验证信用卡,不实用
- accept:输入的最后的字符要是什么,常用于文件的扩展名
- equalTo:与哪个表单字段的值相等,常用于重复输入密码