在做网页表单时时常需要在客户端对表单填写的数据进行验证一番才能提交,我们可以通过自己编写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. ...
随机推荐
- 30 个 php 操作 redis 常用方法代码例子
这篇文章主要介绍了 30 个 php 操作 redis 常用方法代码例子 , 本文其实不止 30 个方法 , 可以操作 string 类型. list 类型和 set 类型的数据 , 需要的朋友可以参 ...
- MySQL的索引
MySQL索引 索引:是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.其可以加快数据读操作,但会使数据写操作变慢:应该构建在被用作查询条 ...
- 新发现:AirDroid(用Web端控制自己的手机发信息)
http://web.airdroid.com/ 好多功能呀,有空研究研究 http://jingyan.baidu.com/article/b24f6c82cd4ade86bfe5daf3.html ...
- 第23章 COM和ActiveX(COM可以实现跨进程跨机器的函数调用)
控件对象既可在EXE中实现,也可在DLL中实现.这种实现对于COM对象的用户来说是透明的.因为COM提供了调度服务(marshaling).COM调度机制能够化进程甚至跨机器的函数调用,这使得16位程 ...
- 关于索引degree设置的问题
--并行查询 可以使用并行查询的情况 1. Full table scans, full partition scans, and fast full index scans 2. Index ful ...
- Silverlight 中 TreeView 的数据绑定
方法一:Silverlight使用XAML标记语言来编写,如果不使用XAML强大的绑定功能,实在是罪过.通过使用绑定,可以将UI与视图模型层分离,有利于系统的维护.作为Silverlight中比较有代 ...
- HDOJ(HDU) 2078 复习时间
Problem Description 为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课 ...
- 《SDN核心技术剖析和实战指南》3.1控制器核心技术读书笔记
在SDN的架构中,控制器可以说是SDN的核心,它负责对底层转发设备的控制以及向上层应用提供可编程性的北向接口.从实现上看,主要分三个层面来考虑,南向接口技术,北向接口技术以及东西向的可扩展性能力.下面 ...
- Android中如何将dp,dip,sp与px相互转化
Android中有很多度量单位:比如常用的dp,dip,sp,px等,有时候需要将他们相互转换,有下面非常方便的方法: 比如sp转换成px: TypedValue.applyDimension(Typ ...
- 解决git提交问题error: The requested URL returned error: 403 Forbidden while accessing
git提交代码时,出现这个错误"error: The requested URL returned error: 403 Forbidden while accessing https&qu ...