首頁  >  文章  >  web前端  >  JQurey Validation表單驗證使用詳解_jquery

JQurey Validation表單驗證使用詳解_jquery

WBOY
WBOY原創
2016-05-16 16:01:281010瀏覽

是一款優秀的插件,它能對客戶端表單進行驗證,並且提供了許多可以自訂的屬性和方法,良好的擴充性。本文就是透過講解這個實例來理解Validation的應用。

本實例涉及到的驗證有:

使用者名稱:長度、字元驗證,重複性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樣式

頁面樣式我不再詳述,大家可以自己寫個樣式,也可以參考DEMO的頁面原始碼。這裡要強調的關鍵樣式是要顯示驗證訊息的樣式

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>

限於篇幅,本文的只截取了實例中HTML程式碼的一小部分,詳細XHTML程式碼可參考頁面DEMO原始碼。值得一提的是,我在給了標籤一個「required」類別樣式,下文將會提到它的作用。

4.應用Validation外掛程式

呼叫Validation外掛的方法:

$(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:定義提示訊息,key:value的形式key是要驗證的元素,值是字串或函數,當驗證不通過時提示的訊息。

messages:{ 
 user:{ 
   required:"用户名不能为空!", 
   remote:"该用户名已存在,请换个其他的用户名!" 
 }, 
 ...... 
} 

本例中涉及的驗證JS就是按照上面的規則進行編寫的,Validation插件封裝了很多基本的驗證方式,如下:

required:true 必須有值,不能為空

remote:url 可以用來判斷使用者名稱等是否已經存在,伺服器端輸出true,表示驗證透過

minlength:6 最小長度為6

maxlength:16 最大長度為16

rangelength:長度範圍

range:[10,20] 數值範圍在10-20之間

email:true 驗證郵件

url:true 驗證網址

dateISO:true 驗證日期格式'yyyy-mm-dd'

digits:true 只能為數字

accept:'gif|jpg' 只接受gif或jpg為字尾的圖片。常用於驗證檔案的副檔名

equalTo:'#pass' 與哪個表單欄位的值相等,常用於驗證重複輸入密碼

此外,我還根據專案實際情況擴充了幾個驗證,驗證的程式碼在validate-ex.js,使用前需要先載入這個JS。它能提供以下驗證:

userName:true 使用者名稱只能包含中文字、英文字母、數字和底線

isMobile:true 手機號碼驗證

isPhone:true 大陸手機號碼驗證

isZipCode:true 郵遞區號驗證

isIdCardNo:true 大陸身分證號碼驗證

ip:true IP位址驗證

以上提供的驗證方式基本上滿足我們在大多數項目中的需求。如果其他特殊驗證需求,可以擴展,方法如:

jQuery.validator.addMethod("isZipCode", function(value, element) {   
 var zip = /^[0-9]{6}$/;   
 return this.optional(element) || (zip.test(value));   
}, "请正确填写您的邮政编码!"); 

疑難問題解決

1、在專案中遇到驗證使用者名稱是否存在時,發現不支援中文輸入驗證。我的解決方法是給使用者名稱進行encodeURIComponent編碼,後台PHP再對接受的值進行urldecode解碼

user:{ 
  remote: { 
     url: "chk_user.php", //服务端验证程序 
     type: "post", //提交方式 
     data: { user: function() { 
       return encodeURIComponent($("#user").val()); //编码数据 
     }} 
  } 
}, 

服務端驗證程式chk_user.php的程式碼:

<&#63;php 
$request = urldecode(trim($_POST['user'])); 
usleep(150000); 
$users = array('daimajiayuan.com', 'jeymii', 'Peter', 'daimajiayuan'); 
$valid = 'true'; 
foreach($users as $user) { 
  if( strtolower($user) == $request ) 
    $valid = 'false'; 
} 
echo $valid; 
&#63;> 

我使用的服務端程式是PHP,您也可以使用ASP,ASP.NET,JAVA等。另外本例為了演示,使用者名稱資料是直接寫在服務端的,真正的應用是從資料庫裡取出的使用者名稱數據,來和接收客戶端的資料進行比較。

2、在驗證checkbox和radio控制項時,驗證資訊不會出現在最後的控制項文字後面,而是直接跟在第一個控制項的後面,不符合我們的要求。

解決方法是在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自带

ece96ac9f78386f207f2557f088783a7 

点击“重置”按钮,表单元素将会重置,但是再运行Validation插件后,验证的提示信息并没重置,就是那些提示信息没有消失。感谢Validation提供了重置表单的方法:resetForm()

$("input:reset").click(function(){ 
  validate.resetForm(); 
}); 

以上所述就是本文的全部内容了,希望大家能够喜欢。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn