在做网页表单时时常需要在客户端对表单填写的数据进行验证一番才能提交,我们可以通过自己编写JavasScript代码来验证,但是有时数据量过多时就会有些难度了。基于jQuery的jquery.validate验证框架帮我们解决了困难,我们可以通过它迅速验证一些常见的输入,并且可以自己扩充自己的验证方法,而且对国际化也有非常好的支持。
今天记录的就是用此插件来实现表单验证,效果图:

1、获取JS文件:http://jqueryvalidation.org/,这个插件的用法就不再多讲了,如不熟悉或者还没用过的可以通过官网了解也可以搜索jquery validate中文API,此文仅仅记录如何实现上图效果。
2、导入JS
1 |
<script src="test/jquery.js" type="text/javascript"></script> |
2 |
<script src="test/jquery.validate.js" type="text/javascript"></script> |
3、创建表单
01 |
<fieldset style="width:700px; margin:0 auto;"> |
03 |
<form id="signupForm" method="get" action=""> |
05 |
<label for="firstname">用户名:</label> |
06 |
<input id="firstname" name="firstname" type="text" /> |
07 |
<span class="red">*</span> |
10 |
<label for="realname">真实名:</label> |
11 |
<input id="realname" name="realname" type="text" /> |
14 |
<label for="password">密 码:</label> |
15 |
<input id="password" name="password" type="password" /> |
16 |
<span class="red">*</span> |
19 |
<label for="confirm_password">确 认:</label> |
20 |
<input id="confirm_password" name="confirm_password" type="password" /> |
21 |
<span class="red">*</span> |
24 |
<label for="email">邮 箱:</label> |
25 |
<input id="email" name="email" type="text" /> |
26 |
<span class="red">*</span> |
29 |
<label for="tel">电 话:</label> |
30 |
<input id="tel" name="tel" type="text" /> |
33 |
<label for="address">地 址:</label> |
34 |
<input id="address" name="address" type="text" /> |
37 |
<label for="idcard">证件号:</label> |
38 |
<input id="idcard" name="idcard" type="text" /> |
41 |
<label for="degree">学 历:</label> |
42 |
<select id="degree" name="degree"> |
43 |
<option value="-1">请选择</option> |
44 |
<option value="1">小学</option> |
45 |
<option value="2">中学</option> |
46 |
<option value="3">大专</option> |
47 |
<option value="4">本科</option> |
48 |
<option value="5">学士</option> |
49 |
<option value="6">硕士</option> |
50 |
<option value="7">博士</option> |
54 |
<label for="sex">性 别:</label> |
55 |
<input type="radio" id="rdoFemale" name="sex" />男 |
56 |
<input type="radio" id="rdoMale" name="sex" />女 |
57 |
<input type="radio" id="rdoSecret" name="sex" />保密 |
60 |
<input id="read" name="read" type="checkbox" /><label for="read">同意相关条约</label> |
63 |
<input class="submit" type="submit" value="Register"/> |
4、表单初始化样式
3 |
input{height:22px; padding:2px;} |
5、验证代码
01 |
$(document).ready(function() { |
04 |
$.validator.setDefaults({ |
05 |
submitHandler: function(form) { |
11 |
$("#signupForm").validate({ |
16 |
byteRangeLength:[4,15] |
39 |
byteRangeLength:[4,100] |
56 |
stringCheck: "请正确输入您的联系地址", |
57 |
byteRangeLength: "请详实您的联系地址以便于我们联系您" |
69 |
errorPlacement: function (error, element) { |
70 |
if (element.is(':radio') || element.is(':checkbox')) { |
71 |
var eid = element.attr('name'); |
72 |
error.appendTo(element.parent()); |
74 |
error.appendTo(element.closest("p")); |
82 |
e.html(" ").addClass("valid").text('ok'); |
到这里表单验证功能就初步完成了,可以试着预览一下效果,点击按钮提交你肯定发现不会进行验证,因为在验证中使用了一些自定义的方法,所以验证失效,那么继续读下去吧,接下来是实现验证的提示信息的个性化和自定义验证方法。
6、我们可以知道validate默认的提示信息是英文的,我们可以编写一个jquery.validate.message_cn.js文件来改变它的提示内容并让提示内容显示成中文的:
05 |
email: "请输入正确格式的电子邮件", |
08 |
dateISO: "请输入合法的日期 (ISO).", |
11 |
creditcard: "请输入合法的信用卡号", |
13 |
accept: "请输入拥有合法后缀名的字符串", |
14 |
maxlength: jQuery.format("请输入一个长度最多是 {0} 的字符串"), |
15 |
minlength: jQuery.format("请输入一个长度最少是 {0} 的字符串"), |
16 |
rangelength: jQuery.format("请输入一个长度介于 {0} 和 {1} 之间的字符串"), |
17 |
range: jQuery.format("请输入一个介于 {0} 和 {1} 之间的值"), |
18 |
max: jQuery.format("请输入一个最大为 {0} 的值"), |
19 |
min: jQuery.format("请输入一个最小为 {0} 的值"), |
22 |
stringCheck: "用户名只能包括中文字、英文字母、数字和下划线", |
23 |
byteRangeLength: "用户名必须在4-15个字符之间(一个中文字算2个字符)", |
24 |
isIdCardNo: "请正确输入您的身份证号码", |
26 |
jQuery.extend(jQuery.validator.messages, cnmsg); |
可以看到此文件中有一个自定义验证方法的提示信息,这些验证方法也是让之前预览没有验证效果的原凶哦,validate插件提供自定义验证方法,继续完善 jquery.validate.message_cn.js(自定义验证方法来源于网络) 文件:
02 |
jQuery.validator.addMethod("stringCheck", function(value, element) { |
03 |
return this.optional(element) || /^[\u0391-\uFFE5\w]+$/.test(value); |
04 |
}, "只能包括中文字、英文字母、数字和下划线"); |
07 |
jQuery.validator.addMethod("byteRangeLength", function(value, element, param) { |
08 |
var length = value.length; |
09 |
for(var i = 0; i < value.length; i++){ |
10 |
if(value.charCodeAt(i) > 127){ |
14 |
return this.optional(element) || ( length >= param[0] && length <= param[1] ); |
15 |
}, "请确保输入的值在4-15个字节之间(一个中文字算2个字节)"); |
18 |
jQuery.validator.addMethod("isIdCardNo", function(value, element) { |
19 |
return this.optional(element) || isIdCardNo(value); |
25 |
function isIdCardNo(num) { |
27 |
var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); |
28 |
var parityBit=new Array("1","0","X","9","8","7","6","5","4","3","2"); |
29 |
var varArray = new Array(); |
33 |
var intStrLen = num.length; |
36 |
if ((intStrLen != 15) && (intStrLen != 18)) { |
39 |
// check and set value |
40 |
for(i=0;i<intStrLen;i++) { |
41 |
varArray[i] = idNumber.charAt(i); |
42 |
if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) { |
45 |
varArray[i] = varArray[i] * factorArr[i]; |
49 |
if (intStrLen == 18) { |
51 |
var date8 = idNumber.substring(6,14); |
52 |
if (isDate8(date8) == false) { |
55 |
// calculate the sum of the products |
57 |
lngProduct = lngProduct + varArray[i]; |
59 |
// calculate the check digit |
60 |
intCheckDigit = parityBit[lngProduct % 11]; |
62 |
if (varArray[17] != intCheckDigit) { |
68 |
var date6 = idNumber.substring(6,12); |
69 |
if (isDate6(date6) == false) { |
在文件中导入jquery.validate.message_cn.js文件
1 |
<script src="test/jquery.validate.message_cn.js" type="text/javascript"></script> |
到这里表单的验证功能就做好了,现在预览的效果应该是这样的:

如果没是这样的效果那要好好看看是不是漏了哪一步呢?还有最后一步就是编写验证样式来实现个性化验证,那个正确('√')和错误('×')的提示是背景图片,我们可以从网上找到自己中意的小图标就行了,验证样式为:
07 |
input.error { border: 1px dashed red;background:yellow; padding:2px; } |
08 |
select.error { border: 1px dashed red; background:yellow; padding:2px; } |
14 |
background: url(unchecked.gif) no-repeat 0px 0px; |
15 |
font-family:Verdana, Geneva, sans-serif; |
19 |
input.valid{ background:#FFC; border:#09F solid 1px; padding:2px;} |
20 |
select.valid{ background:#FFC; border:#09F solid 1px; padding:2px;} |
25 |
background: url(checked.gif) no-repeat 0px 0px; |
26 |
font-family:Verdana, Geneva, sans-serif; |
当然这个只是我这个效果的样式,表单和验证样式都可以根据自己的喜好来设置。这些都做完之后再次预览就应该是文中开头那个的效果图片了。
记录只是方便以后查阅,若有不足和建议欢迎留言。
- ASP.NET MVC Jquery Validate 表单验证的多种方式
在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...
- [转]ASP.NET MVC Jquery Validate 表单验证的多种方式介绍
在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...
- Jquery Validate 表单验证的多种方式
ASP.NET MVC Jquery Validate 表单验证的多种方式 在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体 ...
- jQuery Validate 表单验证 — 用户注册简单应用
相信很多coder在表单验证这块都是自己写验证规则的,今天我们用jQuery Validate这款前端验证利器来写一个简单的应用. 可以先把我写的这个小demo运行试下,先睹为快.猛戳链接--> ...
- jquery validate表单验证插件-推荐
1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家. 1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素 3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...
- jquery validate表单验证插件
1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家. 1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素 3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...
- jQuery Validate 表单验证
在做网页表单时时常需要在客户端对表单填写的数据进行验证一番才能提交,我们可以通过自己编写JavasScript代码来验证,但是有时数据量过多时就会有些难度了.基于jQuery的jquery.valid ...
- jQuery Validate 表单验证插件----自定义一个验证方法
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...
- jQuery Validate 表单验证插件----自定义校验结果样式
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...
- jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...
随机推荐
- block 高级
//从后往前传值 声明block属性 //copy 目的是 将栈区的block拷贝一份到堆区 @property(nonatomic,copy)void (^sendValueBlock)(id); ...
- noi 7219:复杂的整数划分问题
7219:复杂的整数划分问题 查看 提交 统计 提问 总时间限制: 200ms 内存限制: 65536kB 描述 将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>= ...
- 在同个工程中使用 Swift 和 Objective-C(Swift 2.0更新)-b
本节包含内容: Mix and Match 概述(Mix and Match Overview) 在同个应用的 target 中导入(Importing Code from Within the Sa ...
- 转:使用Android API最佳实践
原文来自于:http://blog.jobbole.com/65170/ 写在前面 现在,Android应用程序中集成第三方API已十分流行.应用程序都有自己的网络操作和缓存处理机制,但是大部分比较脆 ...
- JavaScript Structure
Element, Data, Event, Logic Data:----------- 1. method 1 var obj = { name : "thinkpad", ag ...
- perl 正则详解
用/s 来匹配任意字符 默认情况下,点号(.)无法匹配换行符,这对大多数单行匹配的情况是合适的. . 圆点用于匹配除换行符外的任何单个字符 + 意味着一个或多个相同的字符 .+ 匹配任意单个字符至少一 ...
- TRAFFIC LIGHTS POJ 1158
题目大意: 在Dingilville 城市安排是一种不同寻常的方式,每个交叉路口有一条道路连接,一条道路最多连接两个不同的交叉路口.每个交叉路口不能连接他自己.道路旅行一端到另一端的时间是相同的,任何 ...
- Ubuntu14.04 安装QQ国际版wine-qqintl
Ubuntu14.04安装qq国际版方式: 首先下载,链接为: https://pan.baidu.com/s/1boPitVD 密码:jp1j 也可去Ubuntu中文的Kylin(优麒麟)官网下载 ...
- cryptopp开源库的使用(零):windows下使用visual studio编译
编译相当简单:打开目录下的sln文件直接编译即可,官方支持到vc2012,我使用vs2013也没有错误,优秀的开源库总是便于使用. 编译的时候注意运行库得选择需要跟使用该库的保持一致,否则会出现重定义 ...
- Java学习日记9-异常
异常(Exception) 一.什么是异常? 异常就是程序中的错误,比如数组越界.访问空指针等.在Java中,一切皆对象,异常也不例外.所有的异常都是派生于Throwable类的一个实例对象. 二.异 ...