国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery插件之validation插件

2019-11-19 17:00:09
字體:
來源:轉載
供稿:網友

前面的話

最常使用javascript的場合就是表單的驗證,而jQuery作為一個優秀的javascript庫,也提供了一個優秀的表單驗證插件――Validation。Validation是歷史最悠久的jQuery插件之一,經過了全球范圍內不同項目的驗證,并得到了許多Web開發者的好評。本文將詳細介紹validation插件

概述

jQuery Validate插件為表單提供了強大的驗證功能,讓客戶端表單驗證變得更簡單,同時提供了大量的定制選項,滿足應用程序各種需求。該插件捆綁了一套有用的驗證方法,包括 URL 和電子郵件驗證,同時提供了一個用來編寫用戶自定義方法的 API。所有的捆綁方法默認使用英語作為錯誤信息,且已翻譯成其他 37 種語言

作為一個標準的驗證方法庫,Validation擁有以下特點:

1、內置驗證規則:擁有必填、數字、E-Mail、URL和信用卡號等19類內置驗證規則

2、自定義驗證規則:可以很方便地自定義驗證規則

3、簡單強大的驗證信息提示:默認了驗證信息提示,并提供自定義覆蓋默認提示信息的功能

4、實時驗證:可以通過keyup或blur事件觸發驗證

validation作為jQuery的一個插件,使用時需要同jQuery一起引入,注意要先引入jquery

<script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script><script src="http://files.cnblogs.com/files/xiaohuochai/jquery.validate-1.13.1.js"></script>

快速上手

validation功能強大且API眾多,如果要快速上手,只要掌握常用功能即可

<form id="demoForm"> <p>  <label for="username">用戶名:</label>  <input type="text" id="username" name="username"/> </p> <p>  <label for="password">密碼:</label>  <input type="password" id="password" name="password"/> </p> <p>  <input type="submit" value="登錄"/> </p></form> <script>$('#demoForm').validate({ rules:{  username:{   required: true,   minlength: 2,   maxlength: 10  },  password:{   required: true,   minlength: 2,   maxlength:10  } }})</script>

上述代碼主要對name為'username'和'password'這兩個input控件進行了校驗,這兩個控件必須填寫內容,且字符長度必須在2-10之間

校驗規則

在快速上手的例子中,使用了required、minlength和maxlength這三個校驗規則。實際上validation的校驗規則有17個之多

序號   規則      描述   required:true    必須輸入的字段   remote:"check.php"  使用 ajax 方法調用 check.php 驗證輸入值   email:true    必須輸入正確格式的電子郵件   url:true     必須輸入正確格式的網址   date:true     必須輸入正確格式的日期,內部調用Date.parse()方法進行校驗   dateISO:true    必須輸入正確格式的日期(ISO),如:2009-06-23,1998/01/22   number:true    必須輸入合法的數字(負數,小數)   digits:true    必須輸入整數   creditcard:    必須輸入合法的信用卡號   equalTo:"#field"   輸入值必須和 #field 相同   accept:     輸入擁有合法后綴名的字符串(上傳文件的后綴)   maxlength:5    輸入長度最多是 5 的字符串(漢字算一個字符)   minlength:10    輸入長度最小是 10 的字符串(漢字算一個字符)   rangelength:[5,10]  輸入長度必須介于 5 和 10 之間的字符串(漢字算一個字符)   range:[5,10]    輸入值必須介于 5 和 10 之間   max:5      輸入值不能大于 5   min:10     輸入值不能小于 10

下面使用一個更詳細的例子,對上面的17個規則進行應用

<form id="demoForm"> <p>  <label for="username">用戶名:</label>  <input type="text" id="username" name="username"/> </p> <p>  <label for="password">密碼:</label>  <input type="password" id="password" name="password"/> </p> <p>  <label for="confirm-password">確認密碼</label>  <input type="password" id="confirm-password" name="confirm-password"/> </p> <p>  <label for="email">電子郵件:</label>  <input id="email" name="email"/> </p> <p>  <label for="url">網址:</label>  <input id="url" name="url"/> </p> <p>  <label for="date">生日:</label>  <input id="date" name="date"/> </p> <p>  <label for="num">隨機數(0-9):</label>  <input id="num" name="num"/> </p> <p>  <label for="card">信用卡號:</label>  <input id="card" name="card"/> </p> <p>  <input type="submit" value="登錄"/> </p></form> <script>$('#demoForm').validate({ rules:{  username:{   required: true,   maxlength: 10  },  password:{   required: true,   range:[5,10]  },  'confirm-password':{   equalTo: "#password"  },  email:{   email:true  },  url:{   url:true  },  date:{   dateISO:true  },  num:{   min:0,   max:9  },  card:{   creditcard:true  } }})</script>

默認提示

由上面的例子中看出,validate的默認提示是英文的

messages: { required: "This field is required.", remote: "Please fix this field.", email: "Please enter a valid email address.", url: "Please enter a valid URL.", date: "Please enter a valid date.", dateISO: "Please enter a valid date ( ISO ).", number: "Please enter a valid number.", digits: "Please enter only digits.", creditcard: "Please enter a valid credit card number.", equalTo: "Please enter the same value again.", maxlength: $.validator.format( "Please enter no more than {0} characters." ), minlength: $.validator.format( "Please enter at least {0} characters." ), rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ), range: $.validator.format( "Please enter a value between {0} and {1}." ), max: $.validator.format( "Please enter a value less than or equal to {0}." ), min: $.validator.format( "Please enter a value greater than or equal to {0}." )}

不過可以將其修改為中文,只要加入以下代碼

$.extend($.validator.messages, { required: "這是必填字段", remote: "請修正此字段", email: "請輸入有效的電子郵件地址", url: "請輸入有效的網址", date: "請輸入有效的日期", dateISO: "請輸入有效的日期 (YYYY-MM-DD)", number: "請輸入有效的數字", digits: "只能輸入數字", creditcard: "請輸入有效的信用卡號碼", equalTo: "你的輸入不相同", extension: "請輸入有效的后綴", maxlength: $.validator.format("最多可以輸入 {0} 個字符"), minlength: $.validator.format("最少要輸入 {0} 個字符"), rangelength: $.validator.format("請輸入長度在 {0} 到 {1} 之間的字符串"), range: $.validator.format("請輸入范圍在 {0} 到 {1} 之間的數值"), max: $.validator.format("請輸入不大于 {0} 的數值"), min: $.validator.format("請輸入不小于 {0} 的數值")});

使用方式

上面的例子中,validate控件的使用,都是通過使用validate()方法完成的,由于這種方法將HTML結構和javascript邏輯分離,使得代碼更加優化

實際上,還有另一種方法就是通過添加HTML屬性的方式或添加class類名的方式來進行驗證,類似于HTML5新增的input類控件的功能

由于已經將驗證規則添加到HTML元素中,所以調用validate()方法時,參數為空

<form id="demoForm"> <p>  <label for="username">用戶名:</label>  <input type="text" id="username" name="username" class="required" minlength="2"/> </p> <p>  <label for="email">電子郵件:</label>  <input id="email" name="email" class="required email"/> </p> <p>  <label for="url">網址:</label>  <input id="url" name="url" class="url"/> </p> <p>  <input type="submit" value="登錄"/> </p></form> <script>$('#demoForm').validate({})</script>

更改提示

無論是validate插件自帶的英文提示,或者是其擴展的中文提示,可能與實際項目的需求不相符。這時,就需要我們對錯誤提示進行更改

而更改錯誤提示的方法也很簡單,只需要使用validate()函數里的,messages()方法即可。如果某個控件沒有使用messages()方法,則使用默認的錯誤提示信息。如下所示

在messages()方法中,{0}代表rules()方法當前規則的屬性值

<form id="demoForm"> <p>  <label for="username">用戶名:</label>  <input type="text" id="username" name="username" /> </p> <p>  <label for="email">電子郵件:</label>  <input id="email" name="email" /> </p> <p>  <label for="url">網址:</label>  <input id="url" name="url"/> </p> <p>  <input type="submit" value="登錄"/> </p></form> <script>$('#demoForm').validate({ rules:{  username:{   required: true,   minlength: 2,   maxlength: 10  },  email:{   required: true,   email:true  },  url:{   required: true,   url:true     } }, messages:{  username:{   required:"請輸入用戶名",   minlength:"至少輸入{0}個字符"  },  email:{   required:"請輸入郵箱",   email:"郵箱格式不正確"  },  url:{   required:"請輸入網址",   url:"網址格式不正確(完整的網址應包括http://或https://)"  } }})</script>

美化樣式

實際上,validate插件輸出錯誤信息的方式是通過增加一個label控件實現的,該label控件的id名為'輸入控件的id名-error',類名為'error',且位于輸入控件的右側

下表中列出了關于錯誤信息的相關屬性的方法

參數      類型    默認值    描述 errorClass    String  "error"  指定錯誤提示的css類名 errorElement    String  "label"  用什么標簽標記錯誤 errorContainer   Selector    無   顯示或者隱藏驗證信息,可以自動實現有錯誤信息出現時把容器屬性變為顯示,無錯誤時隱藏,用處不大。如errorContainer: "#messageBox1, #messageBox2" errorLabelContainer Selector   無   把錯誤信息統一放在一個容器里面 wrapper    String    無   用什么標簽再把上邊的errorELement包起來

【成功樣式】

validate插件有一個success()方法,用來設置要驗證的元素通過驗證后的動作,如果跟一個字符串,會當作一個css類,也可跟一個函數

success:String,Callback

success: function(label) { label.html(" ").addClass("success");} success: "success"

但實際上,validate插件只是將label標簽添加了一個'success'類,且原先的'error'類并沒有刪除。且經過實際測試,'error'類名無法刪除,刪除之后,每次驗證成功時,validate插件都會自動再生成一個label標簽

所以,success的效果無法正常使用,這應該是validate插件的一個bug

<style>label.error{background: no-repeat 0 4px;background-image:url('unchecked.gif');margin-left:6px;padding-left:14px;color:red;}</style><body><form id="demoForm"> <p>  <label for="username">用戶名:</label>  <input type="text" id="username" name="username" /> </p> <p>  <label for="email">電子郵件:</label>  <input id="email" name="email" /> </p> <p>  <label for="url">網址:</label>  <input id="url" name="url"/> </p> <p>  <input type="submit" value="登錄"/> </p></form> <script>$('#demoForm').validate({ rules:{  username:{   required: true,   minlength: 2,   maxlength: 10  },  email:{   required: true,   email:true  },  url:{   required: true,   url:true     } }, messages:{  username:{   required:"請輸入用戶名",   minlength:"至少輸入{0}個字符",   maxlength:"最多輸入{0}個字符"  },  email:{   required:"請輸入郵箱",   email:"郵箱格式不正確"  },  url:{   required:"請輸入網址",   url:"網址格式不正確(完整的網址應包括http://或https://)"  } } })</script>

自定義驗證

由于需求的需要,除提供的默認驗證規則外,還需要自定義驗證規則,滿足業務需要。這時就需要使用addMethod()方法

【addMethod(】

addMethod(name,method,message)方法用來添加一個新的驗證方法

參數 name 是添加的方法的名字。參數 method 是一個函數,接收三個參數 (value,element,param)。value 是元素的值,element 是元素本身,param 是參數

以驗證手機號為例,手機號一般是11位,前3位是號段,后8位一般沒有限制。而且,在手機開頭很可能有0或+86

//開頭(0|/+86)?//前3位13/d|14[579]|15[0-35-9]|17[0135-8]|18/d//后8位/d{8}//手機號碼var phone = /^(0|/+86)?(13/d|14[579]|15[0-35-9]|17[0135-8]|18/d)/d{8}$/;
$.validator.addMethod({ 'phone', function(value,element,param){  var reg = /^(0|/+86)?(13/d|14[579]|15[0-35-9]|17[0135-8]|18/d)/d{8}$/;  return value.test(reg); }, '請輸入正確的手機號碼'})
<style>label.error{margin-left:6px;padding-left:14px;color:red;background: no-repeat 0 4px;background-image:url('data:image/gif;base64,R0lGODlhDgAOAMQAAOpSAPWpgPvf0O5zMPGIUPe+n////+tdEPjJsP718POecO1oIPrUwPzq4Pa0kPKTYPSof////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUUABEALAAAAAAOAA4AAAVcYCQm0AAAA5SIbHGcMHAULazEJ528AGIsgADDIUsEYAYDopBsAAOmXDLpOkVPB0ETFxskpjeY6fD4GhrJBAF1zCYDBx/jFYi8DoEH9yAqcGM0fTwxMywsUFZ1LCEAOw==');}</style><form id="demoForm"> <p>  <label for="phone">手機號碼:</label>  <input type="text" id="phone" name="phone" /> </p> <p>  <input type="button" value="提交"> </p></form> <script>$.validator.addMethod( 'phone', function(value,element,param){  var reg = /^(0|/+86)?(13/d|14[579]|15[0-35-9]|17[0135-8]|18/d)/d{8}$/;  return reg.test(value); }, '請輸入正確的手機號碼');$('#demoForm').validate({ rules:{  phone:{   required: true,   phone:true     } }, messages:{  phone:{   required:"請輸入手機號碼"  } } })</script>

修改觸發方式

下面的雖然是 boolean 型的,但建議除非要改為 false,否則別亂添加

觸發方式      類型   描述                         默認值onsubmit     Boolean 提交時驗證。設置為 false 就用其他方法去驗證     trueonfocusout    Boolean 失去焦點時驗證(不包括復選框/單選按鈕)         trueonkeyup     Boolean 在 keyup 時驗證。                   trueonclick     Boolean 在點擊復選框和單選按鈕時驗證              truefocusInvalid  Boolean 提交表單后,未通過驗證的表單會獲得焦點          truefocusCleanup  Boolean 如果是true,當未通過驗證的元素獲得焦點時,移除錯誤提示 false

遠程校驗

使用 ajax 方式進行驗證,默認會提交當前驗證的值到遠程地址,如果需要提交其他的值,可以使用 data 選項

[注意]遠程地址只能輸出 "true" 或 "false",不能有其他輸出

remote: { url: "check-email.php",  //后臺處理程序 type: "post",    //數據發送方式 dataType: "json",   //接受數據格式  data: {      //要傳遞的數據  username: function() {   return $("#username").val();  } }}
<style>label.error{margin-left:6px;padding-left:14px;color:red;background: no-repeat 0 4px;background-image:url('data:image/gif;base64,R0lGODlhDgAOAMQAAOpSAPWpgPvf0O5zMPGIUPe+n////+tdEPjJsP718POecO1oIPrUwPzq4Pa0kPKTYPSof////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUUABEALAAAAAAOAA4AAAVcYCQm0AAAA5SIbHGcMHAULazEJ528AGIsgADDIUsEYAYDopBsAAOmXDLpOkVPB0ETFxskpjeY6fD4GhrJBAF1zCYDBx/jFYi8DoEH9yAqcGM0fTwxMywsUFZ1LCEAOw==');}</style><form id="demoForm">  <p>    <label for="num">請選擇數字</label>    <select name="num" id="num">      <option value="1">1</option>      <option value="2">2</option>      <option value="3">3</option>    </select>  </p>  <p>    <input type="button" value="提交">  </p></form> <script>$('#demoForm').validate({  rules:{    num:{      remote:"validateTest.php"    }  },  messages:{    num:{      remote:"選擇的數字不正確"    }  }});</script>
<?phpfunction test_input($data) {  $data = trim($data);  $data = stripslashes($data);  $data = htmlspecialchars($data);  return $data;}$data = test_input($_REQUEST['num']);if($data == '2'){  echo "true";}else{  echo "false";}?>

最后

validation插件的功能不只于此,但本文基本上把常用的功能進行了詳細的介紹。如果要了解validation更高級的功能,請移步官方網站

最后介紹一個比較有趣的知識――validate、validation和validator,它們的中文意思是驗證。validation插件的js文件名是validate.js,validation插件中最常用的方法就是validate()方法,基本上所有的驗證操作都通過該方法進行。如果要進行自定義驗證的話,則需要用到validator對象下的靜態方法addMethod()

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁蒗| 普兰店市| 邵武市| 六安市| 禄劝| 舟曲县| 永平县| 华蓥市| 双柏县| 登封市| 西乌珠穆沁旗| 商水县| 普宁市| 开平市| 葫芦岛市| 新平| 会东县| 南丹县| 汉阴县| 斗六市| 扎囊县| 池州市| 杂多县| 遂溪县| 乌鲁木齐市| 元江| 卢湾区| 自治县| 宣化县| 墨竹工卡县| 崇义县| 仁怀市| 临猗县| 任丘市| 汉中市| 闽侯县| 永寿县| 新竹市| 阳城县| 绥宁县| 静宁县|