jQuery.validate是一款非常不錯的表單驗證工具,簡單易上手,而且能達到很好的體驗效果,雖然說在專案中早已用過,但看到這篇文章寫得還是不錯的,轉載下與大家共同分享。
一、用前必備
官方網站:
http://bassistance.de/jquery-plugins/jquery-plugin-validation/(注意下載最新版)
API:
http://jquery.bassistance.de/api-browser/plugins.html當前版本:1.5.5
需要JQuery版本:1.2.6+, 相容 1.3.2<script src="../js/jquery.js" type="text/javascript"></script>
<script src="../js/jquery.validate.js" type="text/javascript"></script>
二、預設校驗規則
1.將校驗規則寫到控制元件中
-
<script src="../js/jquery.js" type="text/javascript"></script>
-
<script src="../js/jquery.validate.js" type="text/javascript"></script>
-
<script src="./js/jquery.metadata.js" type="text/javascript"></script>$().ready(function() {
-
$("#signupForm").validate();
-
});
-
<form id="signupForm" method="get" action="">
-
<p>
-
<label for="firstname">Firstname</label>
-
<input id="firstname" name="firstname" class="required" />
-
</p>
-
<p>
-
<label for="email">E-Mail</label>
-
<input id="email" name="email" class="required email" />
-
</p>
-
<p>
-
<label for="password">Password</label>
-
<input id="password" name="password" type="password" class="{required:true,minlength:5}" />
-
</p>
-
<p>
-
<label for="confirm_password">確認密碼</label>
-
<input id="confirm_password" name="confirm_password" type="password" class="{required:true,minlength:5,equalTo:'#password'}" />
-
</p>
-
<p>
-
<input class="submit" type="submit" value="Submit"/>
-
</p>
</form>使用class="{}"的方式,必須引入包:jquery.metadata.js可以使用如下的方法,修改提示內容:
class="{required:true,minlength:5,messages:{required:'請輸入內容'}}"在使用equalTo關鍵字時,後面的內容必須加上引號,如下程式碼:
class="{required:true,minlength:5,equalTo:'#password'}"另外一個方式,使用關鍵字:meta(為了後設資料使用其他外掛你要包裝 你的驗證規則 在他們自己的專案中可以用這個特殊的選項)
Tell the validation plugin to look inside a validate-property in metadata for validation rules.
例如:
-
meta: "validate"
-
<input id="password" name="password" type="password" class="{validate:{required:true,minlength:5}}" />
-
再有一種方式:
-
$.metadata.setType("attr", "validate");這樣可以使用validate="{required:true}"的方式,或者class="required",但class="{required:true,minlength:5}"將不起作用 2.將校驗規則寫到程式碼中
-
-
$().ready(function() {
-
$("#unionRegForm").validate({
-
rules: {
-
username:{ required:true, rangelength:[6,15] },
-
email:{ required:true, email:true},
-
password:{ required:true, rangelength:[6,15]},
-
password2:{ required:true, rangelength:[6,15], equalTo: "#password"}
-
},
-
messages: {
-
username:{ required:"請輸入使用者名稱", rangelength:"使用者名稱長度在6-15位之間"},
-
email:{ required:"請輸入Email地址", email:"請輸入正確的email地址"},
-
password:{ required:"請輸入密碼", rangelength:"密碼長度在6-15位之間"},
-
password2:{ required:"請輸入確認密碼", rangelength:"確認密碼不能小於6個字元", equalTo:"兩次輸入密碼不一致不一致"}
-
}
-
});
-
});
-
//messages處,如果某個控制元件沒有message,將呼叫預設的資訊
-
<form id="signupForm" method="get" action="">
-
<p>
-
<label for="firstname">Firstname</label>
-
<input id="firstname" name="firstname" />
-
</p>
-
<p>
-
<label for="email">E-Mail</label>
-
<input id="email" name="email" />
-
</p>
-
<p>
-
<label for="password">Password</label>
-
<input id="password" name="password" type="password" />
-
</p>
-
<p>
-
<label for="confirm_password">確認密碼</label>
-
<input id="confirm_password" name="confirm_password" type="password" />
-
</p>
-
<p>
-
<input class="submit" type="submit" value="Submit"/>
-
</p>
-
</form>
required:true 必須有值
required:"#aa:checked"表示式的值為真,則需要驗證
required:function(){}返回為真,表時需要驗證
後邊兩種常用於,表單中需要同時填或不填的元素
五、常用方法及注意問題
1.用其他方式替代預設的SUBMIT$().ready(function() {
$("#signupForm").validate({
submitHandler:function(form){
alert("submitted");
form.submit();
}
});
});可以設定validate的預設值,寫法如下:
$.validator.setDefaults({
submitHandler: function(form) { alert("submitted!");form.submit(); }
});如果想提交表單, 需要使用form.submit()而不要使用$(form).submit()
2.debug,如果這個引數為true,那麼表單不會提交,只進行檢查,除錯時十分方便
$().ready(function() {
$("#signupForm").validate({
debug:true
});
});
如果一個頁面中有多個表單,用
$.validator.setDefaults({
debug: true
})
3.ignore:忽略某些元素不驗證
ignore: ".ignore"
4.errorPlacement:Callback Default: 把錯誤資訊放在驗證的元素後面
指明錯誤放置的位置,預設情況是:error.appendTo(element.parent());即把錯誤資訊放在驗證的元素後面
-
errorPlacement: function(error, element) {
-
error.appendTo(element.parent());
-
}//示例:
-
<tr>
-
<td class="label"><label id="lfirstname" for="firstname">First Name</label></td>
-
<td class="field"><input id="firstname" name="firstname" type="text" value="" maxlength="100" /></td>
-
<td class="status"></td>
-
</tr>
-
<tr>
-
<td style="padding-right: 5px;">
-
<input id="dateformat_eu" name="dateformat" type="radio" value="0" />
-
<label id="ldateformat_eu" for="dateformat_eu">14/02/07</label>
-
</td>
-
<td style="padding-left: 5px;">
-
<input id="dateformat_am" name="dateformat" type="radio" value="1" />
-
<label id="ldateformat_am" for="dateformat_am">02/14/07</label>
-
</td>
-
<td></td>
-
</tr>
-
<tr>
-
<td class="label"> </td>
-
<td class="field" colspan="2">
-
<div id="termswrap">
-
<input id="terms" type="checkbox" name="terms" />
-
<label id="lterms" for="terms">I have read and accept the Terms of Use.</label>
-
</div>
-
</td>
-
</tr>errorPlacement: function(error, element) {
-
if ( element.is(":radio") )
-
error.appendTo( element.parent().next().next() );
-
else if ( element.is(":checkbox") )
-
error.appendTo ( element.next() );
-
else
-
error.appendTo( element.parent().next() );
-
}
程式碼的作用是:一般情況下把錯誤資訊顯示在<td class="status"></td>中,如果是radio顯示在<td></td>中,如果是checkbox顯示在內容的後面errorClass:String Default: "error"
指定錯誤提示的css類名,可以自定義錯誤提示的樣式errorElement:String Default: "label"
用什麼標籤標記錯誤,預設的是label你可以改成emerrorContainer:Selector
顯示或者隱藏驗證資訊,可以自動實現有錯誤資訊出現時把容器屬性變為顯示,無錯誤時隱藏,用處不大
errorContainer: "#messageBox1, #messageBox2"errorLabelContainer:Selector
把錯誤資訊統一放在一個容器裡面。wrapper:String
用什麼標籤再把上邊的errorELement包起來一般這三個屬性同時使用,實現在一個容器內顯示所有錯誤提示的功能,並且沒有資訊時自動隱藏errorContainer: "div.error",
errorLabelContainer: $("#signupForm div.error"),
wrapper: "li" 設定錯誤提示的樣式,可以增加圖示顯示input.error { border: 1px solid red; }
label.error { background:url("./demo/images/unchecked.gif") no-repeat 0px 0px; padding-left: 16px; padding-bottom: 2px; font-weight: bold; color: #EA5200; }
label.checked { background:url("./demo/images/checked.gif") no-repeat 0px 0px;}success:String,Callback
要驗證的元素通過驗證後的動作,如果跟一個字串,會當做一個css類,也可跟一個函式
success: function(label) {
// set as text for IE
label.html(" ").addClass("checked");
//label.addClass("valid").text("Ok!")
}
新增"valid" 到驗證元素, 在CSS中定義的樣式<style>label.valid {}</style>
success: "valid" nsubmit: Boolean Default: true
提交時驗證. 設定唯false就用其他方法去驗證
onfocusout:Boolean Default: true
失去焦點是驗證(不包括checkboxes/radio buttons)
onkeyup:Boolean Default: true
在keyup時驗證.
onclick:Boolean Default: true
在checkboxes 和 radio 點選時驗證
focusInvalid:Boolean Default: true
提交表單後,未通過驗證的表單(第一個或提交之前獲得焦點的未通過驗證的表單)會獲得焦點
focusCleanup:Boolean Default: false
如果是true那麼當未通過驗證的元素獲得焦點時,移除錯誤提示。避免和 focusInvalid 一起用 // 重置表單
$().ready(function() {
var validator = $("#signupForm").validate({
submitHandler:function(form){
alert("submitted");
form.submit();
}
});
$("#reset").click(function() {
validator.resetForm();
});}); remote:URL
使用ajax方式進行驗證,預設會提交當前驗證的值到遠端地址,如果需要提交其他的值,可以使用data選項remote: "check-email.php"remote: {
url: "check-email.php", //後臺處理程式
type: "post", //資料傳送方式
dataType: "json", //接受資料格式
data: { //要傳遞的資料
username: function() {
return $("#username").val();
}
}
}
遠端地址只能輸出 "true" 或 "false",不能有其它輸出 addMethod:name, method, message
自定義驗證方法