麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

jQuery驗證插件validate使用方法詳解

2019-11-20 09:54:35
字體:
來源:轉載
供稿:網友

1. 寫在前面

  我們知道,用戶在注冊的時候,會有個表單頁面,然后有些選項是必填的,有些要填的內容是有規范的,這些都要在用戶提交之前進行驗證才行,如果不符合要求,需要在右邊顯示一個友好的提示,讓用戶修改。
  記得以前在學習Servlet的時候,實現一個簡單的用戶注冊功能的驗證是在后臺做的,有些用了正則表達式,有些沒用,但是都比較簡單。流程是這樣的,前臺提交表單數據后,servlet獲取數據先進行驗證,如果不符合要求,將提示信息放到一個List中,然后再把List存到session中,跳轉到一個新的頁面做回顯,把錯誤信息也顯示出來,但是比較繁瑣。
  前面做網上商城項目的時候,用EasyUI做后臺商品添加時,也做了驗證的功能,EasyUI自帶了驗證的功能,還是很強大的,效果也不錯。感興趣的話不妨來看一下這篇文章
  但是前臺用戶注冊的頁面我們該如何做呢?這就是本文所要介紹的主要內容了,我們可以使用jQuery的Validate插件來做注冊的驗證功能,jQuery我也沒有系統的學習,只是用到什么學什么,用到什么了解什么,所以如有錯誤之處,歡迎留言指正~下面我一步步通過代碼詳細介紹一下jQuery-Validate驗證插件的使用步驟。

2. 效果展示

  首先來看一下最后實現的效果,先有個直觀的感受,個人感覺還算可以的~能接受。

表單驗證

  從圖中可以看出,包括輸入前的提示,輸入正確和錯誤的提示的功能,都已經完成。再看一下我的工程:

工程文件

  總共有6個jsp文件,之所以寫成6個是為了一步步解說做這個效果的步驟,最后terminal.jsp是最終版的。運行的時候也只需要運行這個terminal.jsp即可。 下面我詳細分析一下使用jQurey-Validate驗證插件的過程。

3. Validate環境的搭建

   環境搭建,肯定少不了jar包,我使用的是jQuery-validate-1.15,官方上給出了依賴的幾個版本的jQuery,我下了jQuery-1.11.1。所以將這兩個js文件放到工程中WebRoot/js中,并在jsp頁面中導入即可。

demo1

   demo1.jsp很簡單,為了搭建環境而已,如果點擊提交,不會跳轉到指定頁面表示環境搭建成功。

4. Validate基本方法的使用

      好了,環境搭建成功了,接下來我們開始使用Validate的基本方法了,這里還要導入一個js文件:additional-methods.js,新版本的jQuery-validate-1.15中沒有對文件后綴的驗證,后來我在官網上查了一下,官網上說放到additional-methods.js中了,所以我去下了個,放到工程中了,而且方法名也和老版本不太一樣,下面再說。看一下demo2.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>jquery validate驗證</title> <script type="text/javascript" src="js/jquery-1.11.1.js"></script> <script type="text/javascript" src="js/jquery.validate.js"></script> <script type="text/javascript" src="js/additional-methods.js"></script> <script type="text/javascript"> $(function(){ //讓當前表單調用validate方法,實現表單驗證功能 $("#ff").validate({ debug:true, //調試模式,即使驗證成功也不會跳轉到目標頁面 rules:{ //配置驗證規則,key就是被驗證的dom對象,value就是調用驗證的方法(也是json格式)  sname:{  required:true, //必填。如果驗證方法不需要參數,則配置為true  rangelength:[6,12]  },  spass:{  required:true,  rangelength:[6,12]  },  spass2:{  required:true,  equalTo:'#spass' //表示和id="spass"的值相同  },  slike:{  required:true,  },  semail:{  required:true,  email:true  },  simage:{  required:true,  extension:'gif|jpe?g|png'  } } }); }); </script> </head> <body> <!--  <ul> <li>演示基本方法的使用</li> <li>jquery.validate.js中260行有缺省的驗證配置</li> <li>jquery.validate.js中354行有驗證方法出錯的消息,即告訴我們都有哪些驗證方法</li> </ul> --> <form id="ff" action="http://www.hao123.com" method="post"> 姓名:<input type="text" name="sname" /><br/> 密碼:<input type="password" name="spass" id="spass"/><br/> 確認密碼:<input type="password" name="spass2" /><br/> 愛好: 上網:<input type="checkbox" name="slike" value="上網"/> 唱歌:<input type="checkbox" name="slike" value="唱歌"/> 編程:<input type="checkbox" name="slike" value="編程"/> 書法:<input type="checkbox" name="slike" value="書法"/><br/> 郵箱:<input type="text" name="semail" /><br/> 頭像:<input type="file" name="simage" /><br/> <input type="submit" value="提交"> </form> </body></html>

  demo2中,我們寫了一些基本的表單了,并且在js中對其進行了驗證,validate中定義了一些缺省的驗證,required表示必填字段,rangelength表示長度范圍,用數組表示范圍邊界,equalTo后面跟一個id,表示跟后面跟的id的元素內容相同,這里說一下extension,表示后綴,以前版本叫accept,新版本中改為extension了,網上的搜索的關于后綴的驗證都是accept,新版沒了,而且extension就是在新加的additional-methods.js中。我們看一下這個版本的效果:

demo2

  有點丑……因為還沒做css, 但是我直接點擊提交,會出現一些驗證信息了,這些都是默認的信息,是源碼中提供的,說明一點,驗證功能生效了,我們下面就改寫一下后面顯示的信息,這些默認的顯然不太友好。

5. 實現錯誤消息的本地化

   我們可以指定messages消息的顯示內容,也是json格式的,如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>jquery validate驗證</title> <script type="text/javascript" src="jquery-1.11.1.js"></script> <script type="text/javascript" src="jquery.validate.js"></script> <script type="text/javascript" src="additional-methods.js"></script> <script type="text/javascript"> $(function(){ //讓當前表單調用validate方法,實現表單驗證功能 $("#ff").validate({ debug:true, //調試模式,即使驗證成功也不會跳轉到目標頁面 rules:{ //配置驗證規則,key就是被驗證的dom對象,value就是調用驗證的方法(也是json格式)  sname:{  required:true, //必填。如果驗證方法不需要參數,則配置為true  rangelength:[6,12]  },  spass:{  required:true,  rangelength:[6,12]  },  spass2:{  required:true,  equalTo:'#spass' //表示和id="spass"的值相同  },  saddress:{  required:true  },  semail:{  required:true,  email:true  },  simage:{  required:true,  extension:'gif|jpe?g|png'  } }, messages:{  sname:{  required:"請輸入用戶名",  rangelength:$.validator.format("用戶名長度在必須為:{0}-{1}之間")  },  spass:{  required:"請輸入密碼",  rangelength:$.validator.format("字段長度必須為:{0}-{1}之間")  },  spass2:{  required:"請再次輸入密碼",  equalTo:"兩次密碼必須一致" //表示和id="spass"的值相同  },  saddress:{  required:"請選擇地址"  },  semail:{  required:"請填寫郵件",  email:"郵箱格式不正確"  },  simage:{  required:"請選擇要上傳的頭像",  extension:"文件后綴名必須為jpg,jpeg,gif,png"  } } }); }); </script> </head> <body> <!-- body中的內容不變,省略不寫了 --> </body></html>

  相當于覆寫了原來默認的消息提示,來看下效果:

demo3

  這就有點感覺了。繼續往下完善。

6. 實現遠程驗證

      所謂遠程驗證,指的是當用戶注冊時輸入用戶名時,系統得從數據庫中查詢是否已經有該用戶名了,如果有則告訴用戶已經有人注冊過了該名字了,但是我們不用去查數據庫,我們寫個Action模擬下即可,主要是實現validate插件和Action之間的通信。看demo4.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>jquery validate驗證</title> <script type="text/javascript" src="js/jquery-1.11.1.js"></script> <script type="text/javascript" src="js/jquery.validate.js"></script> <script type="text/javascript" src="js/additional-methods.js"></script> <script type="text/javascript"> $(function(){ //讓當前表單調用validate方法,實現表單驗證功能 $("#ff").validate({ debug:true, //調試模式,即使驗證成功也不會跳轉到目標頁面 onkeyup:null, //當丟失焦點時才觸發驗證請求 rules:{ //配置驗證規則,key就是被驗證的dom對象,value就是調用驗證的方法(也是json格式)  sname:{  required:true, //必填。如果驗證方法不需要參數,則配置為true  rangelength:[3,12],  remote:{  url:"ajax_check.action",  type:"post"  }  },  spass:{  required:true,  rangelength:[6,12]  },  spass2:{  required:true,  equalTo:'#spass' //表示和id="spass"的值相同  },  saddress:{  required:true  },  semail:{  required:true,  email:true  },  simage:{  required:true,  extension:'gif|jpe?g|png'  } }, messages:{  sname:{  required:"請輸入用戶名",  rangelength:$.validator.format("用戶名長度在必須為:{0}-{1}之間"),  remote:"該用戶名已存在!"  },  spass:{  required:"請輸入密碼",  rangelength:$.validator.format("字段長度必須為:{0}-{1}之間")  },  spass2:{  required:"請再次輸入密碼",  equalTo:"兩次密碼必須一致" //表示和id="spass"的值相同  },  saddress:{  required:"請選擇地址"  },  semail:{  required:"請填寫郵件",  email:"郵箱格式不正確"  },  simage:{  required:"請選擇要上傳的頭像",  extension:"文件后綴名必須為jpg,jpeg,gif,png"  } } }); }); </script> </head> <body> <!-- body中的內容不變,省略不寫了 --> </body></html>

  我們看到,在sname里面新加了個remote方法,這個是用來遠程驗證的,參數url是要發送的請求Action,所以我們后臺寫個AjaxAction,在AjaxAction中寫過check方法來,判斷用戶名是否為admin,如果是,則以流的形式返回false,前臺接收到false就會驗證失敗,返回true則驗證成功。失敗了則告訴用戶該用戶名已存在,后臺Action這里就不寫了,見我上傳的源碼即可。我們來看下效果:

demo4

7. 自定義驗證方法 

  我們也可以自定義驗證的方法,比如手機號,我們可以自己定義驗證方法,自己定義的方法最好寫在擴展js中,我們自己寫一個jquery.validate.extend.js放到js文件夾中,在該文件中寫上:

//自定義方法,完成手機號碼的驗證//name:自定義方法的名稱,method:函數體, message:錯誤消息$.validator.addMethod("phone", function(value, element, param){ //方法中又有三個參數:value:被驗證的值, element:當前驗證的dom對象,param:參數(多個即是數組) //alert(value + "," + $(element).val() + "," + param[0] + "," + param[1]); return new RegExp(/^1[3458]/d{9}$/).test(value);}, "手機號碼不正確");

  addMethod表示新加的方法,第一個參數是方法名,第二個參數是函數體,第三個參數表示驗證錯誤消息。其中函數體中,又有三個參數,value表示驗證的值,element表示當前dom對象,param表示參數。我們使用正則表達式驗證了手機號。這里就不測試了。最后我們來看一下終極的表單驗證,終極驗證表單需要加上CSS了,下面是完整的終極驗證代碼。

8. 驗證表單完整版

8.1 Html表單

  為了讓表單結構簡單而清晰,我們將表單的每個元素都包裹在一個div結構中:用label標簽用來標記元素的名稱,接著便是表單元素本身。【注明:1.使用label標簽的好處是為鼠標用戶改進了可用性。當在label元素內點擊文本時,瀏覽器就會自動將焦點轉到和label相關的表單控件上。2.每個需要校驗的表單元素都應該設置id和name屬性,方便在使用插件時將元素綁定校驗規則和校驗信息。】

  表單實現代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>jquery validate驗證</title> <link rel="stylesheet" href="css/form.css" /> <script type="text/javascript" src="js/jquery-1.11.1.js"></script> <script type="text/javascript" src="js/jquery.validate.js"></script> <script type="text/javascript" src="js/additional-methods.js"></script> <script type="text/javascript" src="js/jquery.validate.extend.js"></script> <script type="text/javascript"> $(function(){ //讓當前表單調用validate方法,實現表單驗證功能 $("#ff").validate({ debug:true, //調試模式,即使驗證成功也不會跳轉到目標頁面 rules:{ //配置驗證規則,key就是被驗證的dom對象,value就是調用驗證的方法(也是json格式)  sname:{  required:true, //必填。如果驗證方法不需要參數,則配置為true  rangelength:[4,12],  remote:{  url:"ajax_check.action",  type:"post"  }  },  spass:{  required:true,  rangelength:[6,16]  },  spass2:{  required:true,  equalTo:'#password' //表示和id="spass"的值相同  },  saddress:{  required:true  },  sphone:{  required:true,  phone:true  },  slike:{  required:true,  },  semail:{  required:true,  email:true  },  simage:{  required:true,  extension:'gif|jpe?g|png'  } }, messages:{  sname:{  required:"請輸入用戶名",  rangelength:$.validator.format("用戶名長度為{0}-{1}個字符"),  remote:"該用戶名已存在!"  },  spass:{  required:"請輸入密碼",  rangelength:$.validator.format("密碼長度為{0}-{1}個字符")  },  spass2:{  required:"請再次輸入密碼",  equalTo:"兩次密碼必須一致" //表示和id="spass"的值相同  },  sphone:{  required:"請輸入手機號"  },  saddress:{  required:"請選擇地址"  },  slike:{  required:"請選擇愛好",  },  semail:{  required:"請填寫郵件",  email:"郵箱格式不正確"  },  simage:{  required:"請選擇要上傳的頭像",  extension:"文件后綴名必須為jpg,jpeg,gif,png"  } } }); }); </script> </head> <body> <form action="http://www.hao123.com" method="post" id="ff"> <fieldset> <legend>jQuery-Validate表單校驗驗證</legend> <div class="item"> <label for="username" class="item-label">用戶名:</label> <input type="text" id="username" name="sname" class="item-text" placeholder="設置用戶名" autocomplete="off" tip="請輸入用戶名"> </div> <div class="item"> <label for="password" class="item-label">密碼:</label> <input type="password" id="password" name="spass" class="item-text"  placeholder="設置密碼" tip="長度為6-16個字符"> </div> <div class="item"> <label for="password" class="item-label">確認密碼:</label> <input type="password" name="spass2" class="item-text" placeholder="設置確認密碼"> </div> <div class="item"> <label for="phone" class="item-label">手機號碼:</label> <input type="text" id="phone" name="sphone" class="item-text" placeholder="輸入手機號碼" tip="請輸入手機號碼"> </div> <div class="item"> <label for="saddress" class="item-label">所在地:</label> <select name="saddress" class="item-select">  <option value="">---請選擇---</option>  <option value="北京">北京</option>  <option value="上海">上海</option>  <option value="深圳">深圳</option> </select> </div> <div class="item"> <label for="slike" class="item-label">愛好:</label>   上網:<input type="checkbox" name="slike" value="上網"/> 唱歌:<input type="checkbox" name="slike" value="唱歌"/> 編程:<input type="checkbox" name="slike" value="編程"/> 書法:<input type="checkbox" name="slike" value="書法"/><br/> </div> <div class="item"> <label for="semail" class="item-label">郵箱:</label> <input type="text" id="semail" name="semail" class="item-text" placeholder="設置郵箱"  autocomplete="off" tip="請輸入郵箱"> </div> <div class="item"> <label for="simage" class="item-label">頭像:</label> <input type="file" name="simage" class="item-file"> </div> <div class="item"> <input type="submit" value="提交" class="item-submit"> </div> </fieldset> </form> </body></html>

8.2 表單驗證js邏輯

  接著我們通過js來實現對表單元素的校驗。在校驗之前,我對jquery validate插件進行了功能擴展,對默認的選項進行了重寫覆蓋。jquery validate插件默認只提供了校驗正確及錯誤時的提示,缺少我們常見的幫助信息提示。為了解決這個問題,我研究了插件的源碼,發現插件本身提供了onfocusin(校驗元素獲得焦點時調用)和onfocusout(校驗元素失去焦點時調用)這兩個函數。通過修改默認參數的這兩個接口,可以實現黨用戶鼠標點擊或選擇元素時(即元素獲得焦點),提示幫助信息;在用戶鼠標離開元素時(即元素失去焦點),移除幫助信息。
  此外,jquery validate默認提供表單元素輸入時的實時校驗,因為我們要求在輸入時只提示用戶幫助信息,故需要關閉輸入的實時校驗,為此我們將默認參數中的onkeyup設置為null。
  具體的擴展改進代碼我放到了新增js腳本jquery.validate.extend.js中,代碼如下:

/*************************插件新功能-設置插件validator的默認參數*****************************************/$.validator.setDefaults({ /*關閉鍵盤輸入時的實時校驗*/ onkeyup: null, /*添加校驗成功后的執行函數--修改提示內容,并為正確提示信息添加新的樣式(默認是valid)*/ success: function(label){ /*label的默認正確樣式為valid,需要通過validClass來重置,否則這里添加的其他樣式不能被清除*/ label.text('').addClass('valid'); }, /*重寫校驗元素獲得焦點后的執行函數--增加[1.光標移入元素時的幫助提示,2.校驗元素的高亮顯示]兩個功能點*/ onfocusin: function( element ) { this.lastActive = element; /*1.幫助提示功能*/ this.addWrapper(this.errorsFor(element)).hide(); var tip = $(element).attr('tip'); //alert(tip); if(tip && $(element).parent().children(".tip").length === 0){ $(element).parent().append("<label class='tip'>" + tip + "</label>"); } /*2.校驗元素的高亮顯示*/ $(element).addClass('highlight'); // Hide error label and remove error class on focus if enabled if ( this.settings.focusCleanup ) { if ( this.settings.unhighlight ) { this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass ); } this.hideThese( this.errorsFor( element ) ); } }, /*重寫校驗元素焦點離開時的執行函數--移除[1.添加的幫助提示,2.校驗元素的高亮顯示]*/ onfocusout: function( element ) { /*1.幫助提示信息移除*/ $(element).parent().children(".tip").remove(); /*2.校驗元素高亮樣式移除*/ $(element).removeClass('highlight'); /*3.替換下面注釋的原始代碼,任何時候光標離開元素都觸發校驗功能*/ //this.element( element ); if ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) { this.element( element ); } }});//自定義方法,完成手機號碼的驗證//name:自定義方法的名稱,method:函數體, message:錯誤消息$.validator.addMethod("phone", function(value, element, param){ //方法中又有三個參數:value:被驗證的值, element:當前驗證的dom對象,param:參數(多個即是數組) //alert(value + "," + $(element).val() + "," + param[0] + "," + param[1]); return new RegExp(/^1[3458]/d{9}$/).test(value);}, "手機號碼不正確");

8.3 表單驗證css樣式

  最后還要為頁面元素添加css樣式。插件中有一系列默認選項:其中默認錯誤顯示標簽為label,錯誤樣式為label.error。上面在jquery.validate.extend.js文件中,有一個success函數需要說明一下。這個函數是在校驗成功的時候執行的,我們在函數中為label提示標簽添加了校驗正確對應的樣式label.valid。因此在css中如果要美化信息提示,需要對label相關樣式如error,valid樣式進行設計。此外我們在擴展插件功能中添加了一個class為tip的label標簽,該標簽僅在校驗元素獲得焦點時生成。為此,還需要設置label的tip樣式。
  完整的樣式文件內容具體如下:

body{ font-family: Microsoft Yahei; font-size: 15px;}fieldset{ width: 650px; }legend{  text-align: center; font-size: 20px;}.item{ height: 56px; line-height: 30px; margin: 10px;}.item .item-label{ float: left; width: 80px; text-align: right;}.item-text{ float: left; width: 240px; height: 30px; padding: 9px 25px 9px 5px; margin-left: 10px; border: 1px solid #ccc; overflow: hidden;}.item-select{ float: left; height: 30px; border: 1px solid #ccc; margin-left: 10px; font-size: 14px; padding: 6px 0px;}.item-file{ float: left; height: 30px; margin-left: 10px; font-size: 14px; padding: 6px 0px;}.item-submit{ float: left; height: 30px; width: 50px; margin-left: 90px; font-size: 14px;}input.error{ border: 1px solid #E6594E;}input.highlight{ border: 1px solid #7abd54;}label.error{ float: left; height: 30px; line-height: 30px; font-size: 14px; text-align: left; margin-left: 5px; padding-left: 35px; color: red; background: url('../image/error.png') no-repeat left center;}label.tip{ float: left; height: 30px; line-height: 30px; font-size: 14px; text-align: left; margin-left: 5px; padding-left: 35px; color: #aaa; background: url('../image/tip.png') no-repeat left center; padding-left: 35px;}label.valid{ background: url('../image/valid.png') no-repeat left center;}

  至此,表單驗證就做好了,這里就不再展示了,看最前面即可。效果還可以,不過還可以更加完善,我對jQuery了解的也不太多,希望大家共同進步!

源碼下載:驗證插件validate

原文地址:http://blog.csdn.net/eson_15/article/details/51497533

以上就是本文的全部內容,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产亚洲欧美在线视频 | av在线观 | 成人av一区二区免费播放 | 天天夜夜操操 | 黄色网址免费进入 | 天海翼无删减av三级在线观看 | 午夜精品福利视频 | 黄色影院在线看 | 久久免费视频一区二区三区 | 成人在线激情视频 | 成人精品免费看 | 国产精品久久国产精麻豆96堂 | 曰韩毛片 | 91在线视频免费观看 | 九九热在线精品视频 | 伦一区二区三区中文字幕v亚洲 | 免费毛片在线视频 | 午夜视频在线观 | 精品一区二区视频在线观看 | 91麻豆精品国产91久久久无需广告 | 日本高清视频网站www | 国产一国产一级毛片视频在线 | 国产又白又嫩又紧又爽18p | 韩国草草影院 | 天堂成人国产精品一区 | 成人做爰高潮片免费视频韩国 | 国产精品久久久久久久久久尿 | 午夜视频播放 | 欧美日韩在线中文字幕 | 免费国产在线视频 | 色爱99| 亚洲第一色婷婷 | 奶子吧naiziba.cc免费午夜片在线观看 | 成人午夜免费在线视频 | 成人羞羞视频在线观看免费 | 在线成人亚洲 | 日本欧美一区二区三区视频麻豆 | 性欧美极品xxxx欧美一区二区 | 日韩视频在线不卡 | 中文字幕一区二区三区四区 | 国产99久久久国产精品下药 |