jQuery Validate表单验证深入学习


Posted in Javascript onDecember 18, 2015

之前一篇文章介绍了jQuery Validate表单验证入门的基础知识,详细内容参见《jQuery Validate表单验证入门学习》今天这篇文章深入学习jQuery Validate表单验证,以下就是文章的全部内容:

1、用其他方式替代默认的 SUBMIT

$().ready(function() {
 $("#signupForm").validate({
  submitHandler:function(form){
   alert("submitted"); 
   form.submit();
  } 
 });
});

使用 ajax 方式

$(".selector").validate({  
 submitHandler: function(form) 
 {  
  $(form).ajaxSubmit();  
 } 
 })

可以设置 validate 的默认值,写法如下:

$.validator.setDefaults({
 submitHandler: function(form) { alert("submitted!");form.submit(); }
});

如果想提交表单, 需要使用 form.submit(),而不要使用 $(form).submit()。
2、debug,只验证不提交表单
如果这个参数为true,那么表单不会提交,只进行检查,调试时十分方便。

$().ready(function() {
 $("#signupForm").validate({
  debug:true
 });
});

如果一个页面中有多个表单都想设置成为 debug,则使用:

$.validator.setDefaults({
 debug: true
})

3、ignore:忽略某些元素不验证
ignore: ".ignore"
4、更改错误信息显示的位置
errorPlacement:Callback
指明错误放置的位置,默认情况是:error.appendTo(element.parent());即把错误信息放在验证的元素后面。

errorPlacement: function(error, element) { 
 error.appendTo(element.parent()); 
}

实例

<tr>
 <td class="label"><label id="lfirstname" for="firstname">First Name</label></td>
 <td class="field"><input id="firstname" name="firstname" type="text" value="" maxlength="100" /></td>
 <td class="status"></td>
</tr>
<tr>
 <td style="padding-right: 5px;">
  <input id="dateformat_eu" name="dateformat" type="radio" value="0" />
  <label id="ldateformat_eu" for="dateformat_eu">14/02/07</label>
 </td>
 <td style="padding-left: 5px;">
  <input id="dateformat_am" name="dateformat" type="radio" value="1" />
  <label id="ldateformat_am" for="dateformat_am">02/14/07</label>
 </td>
 <td></td>
</tr>
<tr>
 <td class="label"> </td>
 <td class="field" colspan="2">
  <div id="termswrap">
   <input id="terms" type="checkbox" name="terms" />
   <label id="lterms" for="terms">I have read and accept the Terms of Use.</label>
  </div>
 </td>
</tr>

errorPlacement: function(error, element) {
 if ( element.is(":radio") )
  error.appendTo( element.parent().next().next() );
 else if ( element.is(":checkbox") )
  error.appendTo ( element.next() );
 else
  error.appendTo( element.parent().next() );
}

代码的作用是:一般情况下把错误信息显示在 <td class="status"></td> 中,如果是 radio 则显示在 <td></td> 中,如果是 checkbox 则显示在内容的后面。
参数 类型 描述 默认值
errorClass String 指定错误提示的 css 类名,可以自定义错误提示的样式。 "error"
errorElement String 用什么标签标记错误,默认是 label,可以改成 em。 "label"
errorContainer Selector 显示或者隐藏验证信息,可以自动实现有错误信息出现时把容器属性变为显示,无错误时隐藏,用处不大。
errorContainer: "#messageBox1, #messageBox2" 
errorLabelContainer Selector 把错误信息统一放在一个容器里面。 
wrapper String 用什么标签再把上边的 errorELement 包起来。 
一般这三个属性同时使用,实现在一个容器内显示所有错误提示的功能,并且没有信息时自动隐藏。
errorContainer: "div.error",
errorLabelContainer: $("#signupForm div.error"),
wrapper: "li"
5、更改错误信息显示的样式
设置错误提示的样式,可以增加图标显示,在该系统中已经建立了一个 validation.css,专门用于维护校验文件的样式。

input.error { border: 1px solid red; }
label.error {
 background:url("./demo/images/unchecked.gif") no-repeat 0px 0px;

 padding-left: 16px;

 padding-bottom: 2px;

 font-weight: bold;

 color: #EA5200;
}
label.checked {
 background:url("./demo/images/checked.gif") no-repeat 0px 0px;
}

6、每个字段验证通过执行函数
success:String,Callback
要验证的元素通过验证后的动作,如果跟一个字符串,会当作一个 css 类,也可跟一个函数。

success: function(label) {
 // set   as text for IE
 label.html(" ").addClass("checked");
 //label.addClass("valid").text("Ok!")
}

添加 "valid" 到验证元素,在 CSS 中定义的样式 <style>label.valid {}</style>。
success: "valid"
7、验证的触发方式修改
下面的虽然是 boolean 型的,但建议除非要改为 false,否则别乱添加。
触发方式 类型 描述 默认值
onsubmit Boolean 提交时验证。设置为 false 就用其他方法去验证。 true
onfocusout Boolean 失去焦点时验证(不包括复选框/单选按钮)。 true
onkeyup Boolean 在 keyup 时验证。 true
onclick Boolean 在点击复选框和单选按钮时验证。 true
focusInvalid Boolean 提交表单后,未通过验证的表单(第一个或提交之前获得焦点的未通过验证的表单)会获得焦点。 true
focusCleanup Boolean 如果是 true 那么当未通过验证的元素获得焦点时,移除错误提示。避免和 focusInvalid 一起用。 false

// 重置表单
$().ready(function() {
 var validator = $("#signupForm").validate({
  submitHandler:function(form){
   alert("submitted"); 
   form.submit();
  } 
 });
 $("#reset").click(function() {
  validator.resetForm();
 });

});

8、异步验证
remote:URL
使用 ajax 方式进行验证,默认会提交当前验证的值到远程地址,如果需要提交其他的值,可以使用 data 选项。

remote: "check-email.php"
remote: {
 url: "check-email.php",  //后台处理程序
 type: "post",    //数据发送方式
 dataType: "json",   //接受数据格式 
 data: {      //要传递的数据
  username: function() {
   return $("#username").val();
  }
 }
}

远程地址只能输出 "true" 或 "false",不能有其他输出。
9、添加自定义校验
addMethod:name, method, message
自定义验证方法

// 中文字两个字节
jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {
 var length = value.length;
 for(var i = 0; i < value.length; i++){
  if(value.charCodeAt(i) > 127){
   length++;
  }
 }
 return this.optional(element) || ( length >= param[0] && length <= param[1] ); 
}, $.validator.format("请确保输入的值在{0}-{1}个字节之间(一个中文字算2个字节)"));

// 邮政编码验证 
jQuery.validator.addMethod("isZipCode", function(value, element) { 
 var tel = /^[0-9]{6}$/;
 return this.optional(element) || (tel.test(value));
}, "请正确填写您的邮政编码");

注意:要在 additional-methods.js 文件中添加或者在 jquery.validate.js 文件中添加。建议一般写在 additional-methods.js 文件中。
注意:在 messages_cn.js 文件中添加:isZipCode: "只能包括中文字、英文字母、数字和下划线"。调用前要添加对 additional-methods.js 文件的引用。
10、radio 和 checkbox、select 的验证
radio 的 required 表示必须选中一个。

<input type="radio" id="gender_male" value="m" name="gender" class="{required:true}" />
<input type="radio" id="gender_female" value="f" name="gender"/>
checkbox 的 required 表示必须选中。
<input type="checkbox" class="checkbox" id="agree" name="agree" class="{required:true}" />
checkbox 的 minlength 表示必须选中的最小个数,maxlength 表示最大的选中个数,rangelength:[2,3] 表示选中个数区间。
<input type="checkbox" class="checkbox" id="spam_email" value="email" name="spam[]" class="{required:true, minlength:2}" />
<input type="checkbox" class="checkbox" id="spam_phone" value="phone" name="spam[]" />
<input type="checkbox" class="checkbox" id="spam_mail" value="mail" name="spam[]" />
select 的 required 表示选中的 value 不能为空。
<select id="jungle" name="jungle" title="Please select something!" class="{required:true}">
 <option value=""></option>
 <option value="1">Buga</option>
 <option value="2">Baga</option>
 <option value="3">Oi</option>
</select>
select 的 minlength 表示选中的最小个数(可多选的 select),maxlength 表示最大的选中个数,rangelength:[2,3] 表示选中个数区间。
<select id="fruit" name="fruit" title="Please select at least two fruits" class="{required:true, minlength:2}" multiple="multiple">
 <option value="b">Banana</option>
 <option value="a">Apple</option>
 <option value="p">Peach</option>
 <option value="t">Turtle</option>
</select>

附表:内置验证方式:

jQuery Validate表单验证深入学习

本文已被整理到了《jquery表单验证大全》 ,欢迎大家学习阅读。

以上就是针对jQuery Validate表单验证的深入学习,希望对大家的学习有所帮助。

Javascript 相关文章推荐
网页自动跳转代码收集
Sep 27 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
Mar 05 Javascript
jQuery ui插件的使用方法代码实例
May 08 Javascript
JS生成不重复随机数组的函数代码
Jun 10 Javascript
JavaScript中的依赖注入详解
Mar 18 Javascript
javascript实现简单的鼠标拖动效果实例
Apr 10 Javascript
js实现基于正则表达式的轻量提示插件
Aug 29 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
Oct 19 Javascript
JavaScript iframe数据共享接口实现方法
Jan 06 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
Jun 07 Javascript
vue指令以及dom操作详解
Mar 04 Javascript
Angularjs之ngModel中的值验证绑定方法
Sep 13 Javascript
JavaScript计划任务后台运行的方法
Dec 18 #Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
Dec 18 #Javascript
原生js实现移动端瀑布流式代码示例
Dec 18 #Javascript
jQuery Validate表单验证入门学习
Dec 18 #Javascript
jQuery定义插件的方法
Dec 18 #Javascript
jQuery Validate插件实现表单强大的验证功能
Dec 18 #Javascript
jquery实现二级导航下拉菜单效果
Dec 18 #Javascript
You might like
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
PHP脚本的10个技巧(3)
2006/10/09 PHP
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python模块学习 filecmp 文件比较
2012/08/27 Python
深入学习python的yield和generator
2016/03/10 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
python的concat等多种用法详解
2018/11/28 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python 实现有道翻译功能
2021/02/26 Python
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
大学系主任推荐信范文
2013/12/24 职场文书
文明青少年标兵事迹材料
2014/01/28 职场文书
个人授权委托书范本
2014/09/14 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
图解上海144收音机
2021/04/22 无线电
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python