在做网页表单时时常需要在客户端对表单填写的数据进行验证一番才能提交,我们可以通过自己编写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. ...
		 
		
	
随机推荐
	
									- java-二分查找法
			
package search; public class BinarySearch { public static void main(String[] args) { , , , , , , , , ...
			 
						- Thinkphp发布文章获取第一张图片为缩略图实现方法
			
正则匹配图片地址获取第一张图片地址 此为函数 在模块或是全局Common文件夹中的function.php中 /** * [getPic description] * 获取文本中首张图片地址 * @p ...
			 
						- eclipse 编辑 python 中文乱码的解决方案
			
今天在学习python时做了一个用户输入一个目录地址,再输入内容,然后将输入的内容存入输入的目录文件中: 具体代码如下: #coding:utf- ''' Created on -- @author: ...
			 
						- powerpoint取色器有什么用|ppt取色器使用教程
			
在使用powerpoint过程中常常发现一些功能我们很少用到,其实是自己不会用的原因,关于powerpoint取色器有什么用呢?接下来我们一起来学一下ppt取色器使用教程. powerpoint取色器 ...
			 
						- UVa 10020 - Minimal coverage(区间覆盖并贪心)
			
Given several segments of line (int the X axis) with coordinates [Li, Ri]. You are to choose the min ...
			 
						- laravel框架——上传、下载文件
			
文件上传 在config文件夹下新建一个 项目名.php return [ 'title' => 'My Test', 'posts_per_page' => 5, 'uploads' = ...
			 
						- 转:快乐Node码农的十个习惯
			
文章来源于:http://www.infoq.com/cn/articles/node.js-habits 从问世到现在将近20年,JavaScript一直缺乏其它有吸引力的编程语言,比如Python ...
			 
						- 转:Git_Windows 系统下Git安装图解
			
原文地址:http://blog.csdn.net/jiguanghoverli/article/details/7902791 Windows 系统下Git安装图解 简单来说Git是一个免费的.开源 ...
			 
						- UOJ 217 奇怪的线段树
			
http://uoj.ac/problem/217 题意就不X了,思路在这: 居然一开始把sap里面的mn设置为inf了,我是傻逼.. #include<cstdio> #include& ...
			 
						- stdout 与 stderr 的区别
			
stdout 与 stderr 的区别 一直没有注意 stdout 与 stderr 的区别,以为只是不同的描述方式.看来不是这样的. stdout 主要处理的是使用者输出 stderr 主要处理的错 ...