7.1 jQuery 表单验证插件 ----- Validation
7.1.1 Validation 简介
validation 特点:
① 内置验证规则:拥有必填、数字、E-mail 、URL 和信用卡号码等 19类内置验证规则
② 自定义验证规则:可以很方便地自定义验证规则
③ 简单强大的验证信息提示:默认了验证信息提示,并提供自定义覆盖默认提示信息的功能
④ 实时验证:可以通过 keyup 或者 blur 事件触发验证,而不仅仅在表单提交的时候验证
7.1.2 validation 下载地址
http://plugins.jquery.com
7.1.3 快速上手
HTML样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> * { font-family: Verdana; font-size: 96%; } label { width: 10em; float: left; } label.error { float: none; color: red; padding-left: .5em; vertical-align: top; } p { clear: both; } .submit { margin-left: 12em; } em { font-weight: bold; padding-right: 1em; vertical-align: top;} </style> <script src="jquery-3.2.1.min.js"></script> <script src="lib/jquery.validate.js"></script> </head> <body> <form class="cmxform" id="commentForm" method="get" action=""> <fieldset> <legend>一个简单的验证带验证提示的评论例子</legend> <p> <label for="cusername">姓名</label> <em>*</em><input id="cusername" name="username" size="25" class="required" minlength="2" /> </p> <p> <label for="cemail">电子邮件</label> <em>*</em><input id="cemail" name="email" size="25" class="required email" /> </p> <p> <label for="curl">网址</label> <em>*</em><input id="curl" name="url" size="25" class="url" value="" /> </p> <p> <label for="ccomment">你的评论</label> <em>*</em><textarea id="ccomment" name="comment" cols="22" class="required"></textarea> </p> <p> <input class="submit" type="submit" value="提交"/> </p> </fieldset> </form> </body> </html>
添加JS脚本
<script> $(function(){ $("#commentForm").validate(); }) </script>
效果:
上面代码验证:
① 名字必填和长度至少2位
② 电子邮件必填和是否为 E-mail 格式的验证
③ 网址是否为 URL 的验证
④ 你的评论的必填验证
步骤:
(1)引入 jQuery 和 Validation 插件
(2)确定哪个表单被验证
(3)针对不同的字段,进行验证规则编码,设置字段相应的属性
class = "required" 为必填写,minlength = "2" 为最小长度为2
class = "required" 为必填写,email 为必填写和内容需要符合 E-mail 格式
class = "url" 为 URL 格式验证
7.1.4 不同的验证写法
上例中,需要把 required / url / email 写到 class 属性中,才能完成必填验证/url 验证/ email 验证,又设置 minlength = “2” 来设置最小值。为了方便管理,将所有与验证相关信息统一都写到 class 中(1)引入一个新的插件 ------- jquery.metadata.js
(2)改变调用的验证方法
$("#commentForm").validata({meta:"validate"});
(3)将验证规则全部编写到class属性中
<form class="cmxform" id="commentForm" method="get" action=""> <fieldset> <legend>一个简单的验证带验证提示的评论例子</legend> <p> <label for="cusername">姓名</label> <em>*</em><input id="cusername" name="username" size="25" class="{validate:{required:true,minlength:2}}" minlength="2" /> </p> <p> <label for="cemail">电子邮件</label> <em>*</em><input id="cemail" name="email" size="25" class="{validate:{required:true,email:true}}" /> </p> <p> <label for="curl">网址</label> <em>*</em><input id="curl" name="url" size="25" class="{validate:{url:true}}" value="" /> </p> <p> <label for="ccomment">你的评论</label> <em>*</em><textarea id="ccomment" name="comment" cols="22" class="{validate:{required:true}}"></textarea> </p> <p> <input class="submit" type="submit" value="提交"/> </p> </fieldset> </form>
通过 name 属性来关联字段和验证规则的写法,这种方法可以实现是为与结构的分离
首先,将字段中的 class 属性移除,此时代码无任何其他多余属性
<form class="cmxform" id="commentForm" method="get" action=""> <fieldset> <legend>一个简单的验证带验证提示的评论例子</legend> <p> <label for="cusername">姓名</label> <em>*</em><input id="cusername" name="username" size="25" /> </p> <p> <label for="cemail">电子邮件</label> <em>*</em><input id="cemail" name="email" size="25" /> </p> <p> <label for="curl">网址</label> <em> </em><input id="curl" name="url" size="25" value="" /> </p> <p> <label for="ccomment">你的评论</label> <em>*</em><textarea id="ccomment" name="comment" cols="22"></textarea> </p> <p> <input class="submit" type="submit" value="提交"/> </p> </fieldset> </form>
编写 jQuery 代码
<script> $(function(){ $("#commentForm").validate({ rules: { username:{ required:true, minlength:2 }, email: { required: true, email: true }, url:"url", comment: "required" } }); }) </script>
与上例效果一致。步骤:
(1)在 $("#commentForm").validate() 方法中增加 rules 属性
(2)通过每个字段的 name 属性值来匹配验证规则
(3)定义验证规则:例如 required:true / email:true / minlength:2 等等.....
7.1.5 验证信息
1. 国际化
将Validation 插件的验证信息默认为中文,只需要引入 validation 提供的中文验证信息库即可
<script src="lib/jquery.validate.messages_cn.js" type="text/javascript"></script>
2. 自定义验证信息
validation 可以很方便地自定义验证规则
<p> <label for="cusername">姓名</label> <em>*</em><input id="cusername" name="username" size="25"
class="{validate:{required:true, minlength:2, messages:{required:'请输入姓名', minlength:'请至少输入两个字符'}}}" /> </p> <script> $(function(){ $("#commentForm").validate({meta: "validate"}); }) </script>
3. 自定义验证信息并美化
为验证提示信息添加些漂亮图片
在CSS中添加样式提示信息,以便与 jQ 中创建的 errorElement 关联
em.error { background:url("images/unchecked.gif") no-repeat 0px 0px; padding-left: 16px; } em.success { background:url("images/checked.gif") no-repeat 0px 0px; padding-left: 16px; }
编写 jQuery
errorElement: "em", //用来创建错误提示信息标签 success: function(label) { //验证成功后的执行的回调函数 //label指向上面那个错误提示信息标签em label.text(" ") //清空错误提示消息 .addClass("success"); //加上自定义的success类 }
完整代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> * { font-family: Verdana; font-size: 96%; } label { width: 10em; float: left; } label.error { float: none; color: red; padding-left: .5em; vertical-align: top; } p { clear: both; } .submit { margin-left: 12em; } em { font-weight: bold; padding-right: 1em; vertical-align: top;} em.error { background:url("images/unchecked.gif") no-repeat 0px 0px; padding-left: 16px;} em.success { background:url("images/checked.gif") no-repeat 0px 0px; padding-left: 16px;} </style> <script src="jquery-3.2.1.min.js"></script> <script src="lib/jquery.validate.js"></script> <script src="lib/jquery.metadata.js" type="text/javascript"></script> <script src="lib/jquery.validate.messages_cn.js" type="text/javascript"></script> </head> <body> <form class="cmxform" id="commentForm" method="get" action=""> <fieldset> <legend>一个简单的验证带验证提示的评论例子</legend> <p> <label for="cusername">姓名</label> <em>*</em><input id="cusername" name="username" size="25" /> </p> <p> <label for="cemail">电子邮件</label> <em>*</em><input id="cemail" name="email" size="25" /> </p> <p> <label for="curl">网址</label> <em>*</em><input id="curl" name="url" size="25" value="" /> </p> <p> <label for="ccomment">你的评论</label> <em>*</em><textarea id="ccomment" name="comment" cols="22"></textarea> </p> <p> <input class="submit" type="submit" value="提交"/> </p> </fieldset> </form> <script> $(function(){ $("#commentForm").validate({ rules: { username:{ required:true, minlength:2 }, email: { required: true, email: true }, url:"url", comment: "required" }, errorElement: "em", //用来创建错误提示信息标签 success: function(label) { //验证成功后的执行的回调函数 //label指向上面那个错误提示信息标签em label.text(" ") //清空错误提示消息 .addClass("success"); //加上自定义的success类 } }); }) </script> </body> </html>
7.1.6 自定义验证规则
在上例基础上,添加验证码
HTML
<p> <label for="cvalcode">验证码</label> <input id="cvalcode" name="valcode" size="25" value="" />=7+9 </p>
为实现验证码功能,步骤:
(1)自定义一个验证规则
//自定义一个验证方法 $.validator.addMethod( "formula", //验证方法名称 function(value, element, param) {//验证规则 return value == eval(param); }, '请正确输入数学公式计算后的结果'//验证提示信息 );
(2)调用该验证规则
在jQuery 中的 rules 中加入 valcode:{ formula: "7+9" }
$("#commentForm").validate({ rules: { username: { required: true, minlength: 2 }, email: { required: true, email: true }, url:"url", comment: "required", valcode: { formula: "7+9" } }, })
完整代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> * { font-family: Verdana; font-size: 96%; } label { width: 10em; float: left; } label.error { float: none; color: red; padding-left: .5em; vertical-align: top; } p { clear: both; } .submit { margin-left: 12em; } em { font-weight: bold; padding-right: 1em; vertical-align: top;} em.error { background:url("images/unchecked.gif") no-repeat 0px 0px; padding-left: 16px;} em.success { background:url("images/checked.gif") no-repeat 0px 0px; padding-left: 16px;} </style> <script src="jquery-3.2.1.min.js"></script> <script src="lib/jquery.validate.js"></script> <script src="lib/jquery.metadata.js" type="text/javascript"></script> <script src="lib/jquery.validate.messages_cn.js" type="text/javascript"></script> </head> <body> <form class="cmxform" id="commentForm" method="get" action=""> <fieldset> <legend>一个简单的验证带验证提示的评论例子</legend> <p> <label for="cusername">姓名</label> <em>*</em><input id="cusername" name="username" size="25" /> </p> <p> <label for="cemail">电子邮件</label> <em>*</em><input id="cemail" name="email" size="25" /> </p> <p> <label for="curl">网址</label> <em>*</em><input id="curl" name="url" size="25" value="" /> </p> <p> <label for="ccomment">你的评论</label> <em>*</em><textarea id="ccomment" name="comment" cols="22"></textarea> </p> <p> <label for="cvalcode">验证码</label> <input id="cvalcode" name="valcode" size="25" value="" />=7+9 </p> <p> <input class="submit" type="submit" value="提交"/> </p> </fieldset> </form> <script type="text/javascript"> $(document).ready(function(){ //自定义一个验证方法 $.validator.addMethod( "formula", //验证方法名称 function(value, element, param) {//验证规则 return value == eval(param); }, '请正确输入数学公式计算后的结果'//验证提示信息 ); $("#commentForm").validate({ rules: { username: { required: true, minlength: 2 }, email: { required: true, email: true }, url:"url", comment: "required", valcode: { formula: "7+9" } }, messages: { username: { required: '请输入姓名', minlength: '请至少输入两个字符' }, email: { required: '请输入电子邮件', email: '请检查电子邮件的格式' }, url: '请检查网址的格式', comment: '请输入您的评论' }, errorElement: "em", //用来创建错误提示信息标签 success: function(label) { //验证成功后的执行的回调函数 //label指向上面那个错误提示信息标签em label.text(" ") //清空错误提示消息 .addClass("success"); //加上自定义的success类 } }); }); </script> </body> </html>
7.1.7 API
Validation 插件的官方 API 地址:
http://docs.jquery.com/Plugins/Validation