
本实例涉及到的验证有:
用户名:长度、字符验证,重复性ajax验证(是否已存在)。
密码:长度验证,重复输入密码验证。
邮件:邮件地址验证。
固定电话:中国大陆固定电话号码验证。
手机号:中国大陆手机号码验证。
网址:网站URL地址验证。
日期:标准日期格式验证。
数字:整数、正整数验证,数字范围验证。
身份证:大陆身份证号码验证。
邮政编码:大陆邮政编码验证。
文件:文件类型(后缀)验证,如只允许上传图片。
IP:IP地址验证。
验证码:验证码ajax验证。
使用方法:
1、准备jquery和jquery.validate插件
<script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.validate.js"></script>2、准备CSS样式
label.error{color:#ea5200; margin-left:4px; padding:0px 20px; background:url(images/unchecked.gif) no-repeat 2px 0 } label.right{margin-left:4px; padding-left:20px; background: url(images/checked.gif) no-repeat 2px 0} 3、XHTML<form id="myform" action="#" method="post"> <table width="100%" border="0" cellspacing="0" cellpadding="0" class="mytable"><tr class="table_title"> <td colspan="2">jquery.validation 表单验证</td></tr><tr> <td width="22%" align="right">用户名:</td> <td><input type="text" name="user" id="user" class="input required" /> <p>用户名为3-16个字符,可以为数字、字母、下划线以及中文</p></td></tr><tr> <td align="right">密码:</td> <td><input type="password" name="pass" id="pass" class="input required" /> <p>最小长度:6 最大长度:16</p> </td></tr><tr> <td align="right">确认密码:</td> <td><input type="password" name="repass" class="input required" /></td></tr> </table> </form>值得一提的是,我在给了标签一个“required”类样式,下文将会提到它的作用。
$(function(){var validate = $("#myform").validate({rules:{ //定义验证规则 ......},messages:{ //定义提示信息 ......} }) }); rules:定义验证规则,key:value的形式,key是要验证的元素,value可以是字符串或对象。比如验证用户名的长度和不允许为空:rules:{user:{required:true,maxlength:16,minlength:3},...... } 其实我们在XHTML代码中可以直接指定input的class属性为required,作用是不允许为空,这样在JS部分就不用重复写了。同样的验证email等,直接设置input的class属性为email。messages:{user:{required:"用户名不能为空!",remote:"该用户名已存在,请换个其他的用户名!"},...... } 本例中涉及的验证JS就是按照上面的规则进行编写的,Validation插件封装了好多基本的验证方式,如下:jQuery.validator.addMethod("isZipCode", function(value, element) {var zip = /^[0-9]{6}$/;return this.optional(element) || (zip.test(value)); }, "请正确填写您的邮政编码!"); 疑难问题解决:user:{ remote: {url: "chk_user.php", //服务端验证程序type: "post", //提交方式data: { user: function() {return encodeURIComponent($("#user").val()); //编码数据}} } }, 服务端验证程序chk_user.php的代码:<?php $request = urldecode(trim($_POST["user"])); usleep(150000); $users = array("月光光", "jeymii", "Peter", "helloweba"); $valid = "true"; foreach($users as $user) { if( strtolower($user) == $request ) $valid = "false"; } echo $valid; ?> 我使用的服务端程序是PHP,您也可以使用ASP,ASP.NET,JAVA等。此外本例为了演示,用户名数据是直接写在服务端的,真正的应用是从数据库里取出的用户名数据,来和接收客户端的数据进行对比。
解决办法是在validate({})追加以下代码:
errorPlacement: function(error, element) { if ( element.is(":radio") ) error.appendTo ( element.parent() ); else if ( element.is(":checkbox") ) error.appendTo ( element.parent() ); else if ( element.is("input[name=captcha]") ) error.appendTo ( element.parent() ); else error.insertAfter(element); } 3、重置表单。Form表单原始的重置方法是reset自带<input type="reset" value="重 置" />点击“重置”按钮,表单元素将会重置,但是再运行Validation插件后,验证的提示信息并没重置,就是那些提示信息没有消失。感谢Validation提供了重置表单的方法:resetForm()
$("input:reset").click(function(){ validate.resetForm(); });