表單驗證外掛Validate.js的使用
表單驗證外掛(validate.js),是一款驗證常規表單資料合法性的外掛。使用該外掛可以極大的簡化了在表單上繁雜的驗證過程,並且錯誤提示顯示的完善也增加了使用者體驗。
1. 使用 validate.js 外掛
該外掛文件中最重要的檔案是 validate.js,還有兩個可選的輔助檔案:additional-methods.js(控制元件 class方式)和 message_zh.js(提示漢化)檔案。由於message_zh.js文件較小,如果要使用漢化提示,可以直接將validate.js文件中相應的程式碼替換成message_zh.js中的程式碼。
使用validate.js 外掛第一步需要引入jquery以及下載的validate.js(jquery需要在外掛之前引入)
<script type="text/javascript" src="jquery-2.2.3.js"></script>
<script type="text/javascript" src="jquery.validate.js"></script>
第二步:在 JS 檔案對相應的form呼叫validate()
$('#reg').validate();
2. 常用預設驗證規則
規則名 | 說明 |
---|---|
required:true | 必須輸入欄位 |
email:true | 必須輸入正確格式的電子郵件 |
url:true | 必須輸入正確格式的網址 |
date:true | 必須輸入正確格式的日期(IE6 驗證出錯) |
dateISO:true | 必須輸入正確格式的日期(ISO) (只驗證格式, 不驗證有效) |
number:true | 必須輸入合法的數字(負數,小數) |
digits:true | 必須輸入正整數 |
creditcard:true | 必須輸入合法的信用卡號,例如:5105105105105100 |
equalTo:”#field” | 輸入值必須和#field 相同 |
minlength:5 | 輸入長度最小是 5 的字串(漢字算一個字元) |
maxlength:10 | 輸入長度最多是 10 的字串(漢字算一個字元) |
rangelength:[5,10] | 輸入長度介於 5 和 10 之間的字串”)(漢字算一個字元) |
range:[5,10] | 輸入值必須介於 5 和 10 之間 |
min:5 | 輸入值不能小於 5 |
max:10 | 輸入值不能大於 10 |
remote:”check.php” | 使用 ajax 方法呼叫 check.php 驗證輸入值 |
Validate.js 的預設驗證規則的寫法有兩種形式:(1)控制元件屬性方式;(2)JS 鍵值對傳參方式。我們通過驗證使用者名稱跟郵箱來展示其用法:
(1)控制元件屬性方式
<form id="reg" action="123.html">
<p>賬號:<input class="required" minlength="2" type="text" name="user" value="" /></p>
<p>郵箱:<input class="required email" type="text" name="email" value="" /></p>
<input type="submit" value="提交" />
</form>
這種方法直接在html標籤上設定其屬性,不需要過多的去寫JS程式碼。但是如果需要控制的屬性較多的屬性時,就會使得html標籤過於冗長。而且這種形式不能設定指定的錯誤提示資訊,因此大部分情況下我們會使用第二種方法。
(2)JS 鍵值對傳參方式
$(function(){
$('#reg').validate({
rules : {
user : {
required : true,
minlength : 2
},
email : {
required : true,
email : true
}
},
messages : {
user : {
required : '帳號不得為空!', // 提示資訊可以自己定義
minlength : '帳號不得小於 2 位!',
},
email : {
required : '帳號不得為空!',
email : '注意!請輸入正確的郵箱格式',
},
}
});
});
3. validate()的方法和選項
3.1 jQuery.format 格式化錯誤提示
當我們根據需求修改預設驗證規則時,也需要在提示錯誤資訊時對應的顯示,因此就可以用到格式化錯誤提示,就比如我們修改了上述的賬號的長度為3~5:
$(function(){
$('#reg').validate({
rules : {
user : {
required : true,
rangelength:[3,5]
}
},
messages : {
user : {
required : '帳號不得為空!',
rangelength : '帳號長度需要在 {0}-{1} 位之間!', //{}表示對應的第幾個數
},
}
});
});
3.2 開啟除錯模式禁止提交
當我們在除錯時,只需要檢測能否驗證,而不需要頁面進行跳轉時,可以開啟除錯模式禁止提交
$('#reg').validate({
debug : true,
});
如果有多個表單,為了不需要每個表單下都寫一遍上述程式碼,可以在全域性環境下設定除錯模式
$.validator.setDefaults({
debug : true,
});
當我們需要阻止表單提交的時候,還要執行程式,這時就可以設定其他方式代替預設提交
$('#reg').validate({
submitHandler : function(){
// some action
},
});
該函式內程式是當驗證成功後執行,而且阻止了預設提交,一般用於ajax提交使用。
3.3 設定成功後加載的樣式
Validate.js外掛內建的驗證成功的樣式為”valid”,我們可以在CSS樣式中自定義valid的樣式:
.valid{
background: url(right.png) no-repeat right;
background-size: auto 100%;
border: 2px solid green;
}
這樣輸入的格式如果通過驗證,即可顯示相應的格式。我在上述樣式中設定成如果驗證成功,即將input輸入框邊框設定為綠色並且新增一個綠色小勾,當輸入驗證通過得到結果為:
當然,也可以修改驗證提示訊息,可以自定義標籤的樣式以及新增文字說明:
success : function(label){
label.addClass('labelStyle').text('ok');
},
labelStyle
為自己定義的樣式類。
3.4 高亮顯示有錯誤的元素
當我們在提交時,如果表單中有的輸入框填寫錯誤,需要高亮顯示出來錯誤的位置,這時需要用到高亮顯示:
highlight : function(element,errorClass){
$(element).css('border','3px solid red');
},
當輸入成功時,需要取消高亮顯示的錯誤,需要用到unhighlight
:
unhighlight : function(element,errorClass){
$(element).css('border','1px solid green');
}
另外,Validate()還有一些其他的屬性和方法,比如表單提交時獲取資訊:invalidHandler,獲取錯誤提示:showErrors等。
4. remote非同步驗證
remote:url,可以對錶單進行 ajax 驗證,預設會提交當前驗證的值到遠端地址。例如我們在註冊時,需要通過後臺伺服器驗證該賬號是否被註冊,這時就需要用到ajax,其具體使用方法可參照下面:
rules : {
user : {
required : true,
rangelength:[3,5],
remote : 'user.php',
}
},
messages : {
user : {
required : '帳號不得為空!',
rangelength : '帳號長度需要在 {0}-{1} 位之間!',
remote : '賬號被佔用',
},
},
user.php
為後臺驗證程式,只是為了簡單的驗證,我們只設置一個user值,對應php程式碼如下:
<?php
if ($_GET['user']=="sean") {
echo 'false';
}else{
echo 'true';
}
?>
當輸入的賬號為“sean”時,就會提示賬號被佔用。加入在登入的時候,我們要同時驗證賬號跟密碼,需要傳送多個數據,這時就需要用到data選項
<!--HTML程式碼-->
<form id="reg" action="123.html">
<p>賬號:<input type="text" name="user" id="user" value="" /></p>
<p>密碼:<input type="text" name="password" value="" /></p>
<input type="submit" value="提交" />
</form>
//JS程式碼
$(function(){
$('#reg').validate({
rules : {
user : {
required : true,
rangelength:[3,5],
},
password : {
required : true,
minlength: 6,
remote : {
url : 'user.php',
type :'GET',
data:{
user: function(){
return $('#user').val();
},
}
},
},
},
messages : {
user : {
required : '帳號不得為空!',
rangelength : '帳號長度需要在 {0}-{1} 位之間!',
remote : '賬號被佔用',
},
password : {
required : '密碼不得為空',
minlength: '密碼長度不得小於6位數',
remote : '賬號或者密碼錯誤',
},
},
});
});
//後臺PHP程式碼
<?php
if ($_GET['user']=="sean" && $_GET['password']=="123456") {
echo 'true';
}else{
echo 'false';
}
?>