在做网页表单时时常需要在客户端对表单填写的数据进行验证一番才能提交,我们可以通过自己编写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. ...
随机推荐
- 一元云购完整源码 云购CMS系统 带安卓和ios手机客户端
看起来不错的一套一元云购CMS源码,源码包里面带了安卓和ios手机客户端,手机客户端需要自己反编译. 这里不做功能和其它更多的介绍,可以自己下载后慢慢测试了解. 下面演示图为亲测截图< ...
- Echop后台分页实现原理详解
ecshop后台开发,工作中分页中遇到的问题 1.通过筛选条件筛选出数据后,点击下一页返回没有筛选(所有数据)的第二页数据 效果 结果 点击分页后效果 问题:ecshop分页利用ajax实现,在点击下 ...
- Tag标签系统设计
转一篇关于tag的文章: <Tagging: People-powered Metadata for the Social Web>出版于2008年,中文版译为<标签:标记系统设计 ...
- virtualBox打开vmdk文件
virtualBox和vmware感觉有不少不同.例如,如果有vmware的虚拟硬盘文件,virtualBox没有办法直接导入.如果想要导入vmdk文件,步骤如下: 1)打开Oracle VM Vir ...
- js类型判断及鸭式辨型
目录 instanceof constructor 构造函数名字 鸭式辨型 三种检测对象的类方式: instanceof.constructor .构造函数名字 用法如下: 1)instanceof ...
- 信用卡/借记卡充值p2p平台
第一部分信用卡/借记卡充值 首先信用卡尽量不要用于网贷,因为这样会有风险,对投资人和借款人都不利,况且银行的钱也不是那么好用的,对吧?但是也有很多朋友问我信用卡相关事宜,我在这里专门做个解答,信用卡用 ...
- Delphi对ini文件的操作
一.INI文件的结构:; 注释[小节名]关键字=值 INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值. 值的类型有三种:字符串.整型数值和布尔值.其中字符串存贮在INI ...
- Android Studio开发环境部署
Step0:背景,那些年-- Step1:安装JDK Step2:安装Android Studio 其他问题1:安装Android Studio之前没有先安装JDK 其他问题2:No JVM inst ...
- Foundation: Binary Search
/* Binary search. * * Implementation history: * 2013-10-5, Mars Fu, first version. */ /* [Binary Sea ...
- Ajax之 beforeSend和complete longind制作
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Consolas; min-height: 18.0px } p.p2 { margin: 0 ...