使用jQuery.Validate進(jìn)行客戶端驗(yàn)證(初級(jí)篇) 不使用微軟驗(yàn)證控件的理由
1、拖控件太麻煩,這個(gè)是微軟控件的常用方式,你要使用一個(gè)控件你得從工具欄中拖到頁面里(當(dāng)然你也可以不拖手寫)。
2、必須指定驗(yàn)證對(duì)象,驗(yàn)證控件與其他textbox,dropdownlist控件不同的是它是驗(yàn)證其他控件的輸入是否有效的,所以必須指定所驗(yàn)證的對(duì)象。
3、影響整個(gè)頁面美觀,像一些管理系統(tǒng)總是需要進(jìn)行大量的用戶輸入驗(yàn)證,所以就可能導(dǎo)致一個(gè)頁面上有幾十個(gè)驗(yàn)證控件嚴(yán)重影響了原來頁面里的東西,看起來十分不舒服。
4、ajax驗(yàn)證不方便,現(xiàn)在的系統(tǒng)越來越注重客戶的用戶體驗(yàn),所以ajax驗(yàn)證必不可少,但是微軟的驗(yàn)證控件并沒有提供ajax驗(yàn)證(當(dāng)然你也可以通過微軟的UpdatePanel來進(jìn)行),需要自己去擴(kuò)展。
說了上面那么多,我只是表明我的意思,微軟的驗(yàn)證控件不太好用,所以這時(shí)候我就在想有沒一些好用點(diǎn)的驗(yàn)證控件呢?
有2個(gè)方法:1、自己編寫一個(gè)(考慮到自己水平還沒那么高,想想還是算了)
2、去找一個(gè)已經(jīng)完善的驗(yàn)證控件(這個(gè)比較靠譜,畢竟我做不到,別人還是能做到的)
所以按照我的要求:1、不用拖控件
2、不影響頁面代碼
3、簡單的AJAX驗(yàn)證
去網(wǎng)絡(luò)搜尋找到了2種類型的:1、自己編寫的ASP.NET驗(yàn)證控件,雖然封裝了比較多的功能但是還是滿足不了我需求
2、javascript類型的驗(yàn)證函數(shù)庫,這個(gè)比較靠譜,畢竟js可以和頁面代碼分離(不影響頁面代碼),只需要調(diào)用函數(shù)庫里的驗(yàn)證代碼就可以進(jìn)行指定對(duì)象的驗(yàn)證了(不用拖控件),同時(shí)ajax本質(zhì)還是要靠javascript來調(diào)用(AJAX驗(yàn)證)
所以我根據(jù)上面第2條線索就搜索使用javascript編寫的驗(yàn)證庫——jQuery.Validate,這個(gè)驗(yàn)證庫是屬于jQuery的插件,是由bassistance.de編寫的,bassistance.de還提供許多jQuery其他插件,如Accordion,Autocomplete(我的使用jQuery.AutoComplete完成仿淘寶商品搜索功能(改進(jìn)了鍵盤上下選擇體驗(yàn))就是基于這個(gè)autocomplete編寫的),Tooltip等等(具體的可以上他們的網(wǎng)站查看)。
決定使用jQuery.Validate首先下載其JS插件:
進(jìn)入http://bassistance.de/jquery-plugins/jquery-plugin-validation/選擇DownLoad下載,里面包含了許多示例可供我們學(xué)習(xí)
接下來我們就開始正式使用了,建立一個(gè)基本的網(wǎng)站,建立好一個(gè)母版頁(這邊使用母版頁是因?yàn)榫唧w的一些項(xiàng)目中都會(huì)有一個(gè)母版頁來存放一些公用的東西,這邊為了模擬一個(gè)真實(shí)的環(huán)境,所以建立母版頁,如果覺得不需要可以不建立直接建立頁面即可),然后把jQuery和jQuery.Validate都引入母版頁:
<script src='<%= Page.ResolveClientUrl("~/scripts/jquery-1.4.1.js") %>' type="text/javascript"></script>
<script src='<%= Page.ResolveClientUrl("~/scripts/jquery.validate1.js") %>' type="text/javascript"></script>
小技巧:與一般的引用不同,我這邊把腳本的路徑采用Page.ResolveClientUrl進(jìn)行獲取,由于在一些項(xiàng)目開發(fā)中,不同模塊的代碼會(huì)分不同的目錄來操作,而母版頁一半是在網(wǎng)站的根目錄所以為了保證所有頁面的基本都可以引用到,所以需要將路徑進(jìn)行重新獲取(不過這樣做也有不好之處就是這樣無法在后臺(tái)的代碼中動(dòng)態(tài)為<header>添加?xùn)|西,編譯器會(huì)報(bào)錯(cuò),解決辦法是在<header>中放入一個(gè)literal控件,在后臺(tái)代碼里重新拼字符串賦給literal)。
在引用完基本所需的腳本后就在母版頁中添加腳本來進(jìn)行驗(yàn)證。
jQuery.Validate是監(jiān)控form,在任何提交表單的操作前jQuery.Validate都會(huì)檢測(cè)表單里的輸入項(xiàng)是否滿足規(guī)則,滿足才允許提交。所以需
要在jQuery(document).ready()時(shí)為form進(jìn)行驗(yàn)證注冊(cè)
具體代碼如下:
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery("#<%=form1.ClientID %>").validate();
});
</script>
</body>
到這邊肯定會(huì)有人疑問了,為什么要把jQuery.Validate的代碼寫在頁面的<body>中,這點(diǎn)牽扯到驗(yàn)證規(guī)則制定和分組驗(yàn)證的方法將會(huì)在中級(jí)篇和高級(jí)篇中講解。
注冊(cè)完驗(yàn)證監(jiān)控后我們就可以開始編寫具體的驗(yàn)證代碼了,我們通過母版頁建立一個(gè)子頁面,在頁面里放幾個(gè)基本的輸入框代碼如下:
<%@ Page Title="員工信息管理-初級(jí)驗(yàn)證" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
CodeFile="Base.aspx.cs" Inherits="_Base" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<table cellpadding="1" cellspacing="1" border="1" width="50%" align="center">
<tr>
<td>
用戶名
</td>
<td>
<asp:TextBox ID="txtUid" runat="server" CssClass="required"></asp:TextBox>
</td>
</tr>
<tr>
<td>
姓名
</td>
<td>
<asp:TextBox ID="txtName" runat="server" CssClass="required"></asp:TextBox>
</td>
</tr>
<tr>
<td>
年齡
</td>
<td>
<asp:TextBox ID="TextBox1" runat="server" CssClass="number"></asp:TextBox>
</td>
</tr>
<tr>
<td>
郵箱
</td>
<td>
<asp:TextBox ID="TextBox2" runat="server" CssClass="email"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<asp:Button ID="Button1" runat="server" Text="提交" />
</td>
</tr>
</table>
</asp:Content>
上面的代碼中我已經(jīng)完成了對(duì)用戶名,姓名,年齡,郵箱的驗(yàn)證了,不知道你發(fā)現(xiàn)了沒,就是在每個(gè)textbox中的class樣式,其中required表示必填,number表示必須是數(shù)字,email表示必須是電子郵件格式,如果寫成required email表示這個(gè)字段必須填寫同時(shí)必須是email格式。
怎么樣?是不是相當(dāng)?shù)暮唵?,省去了拖控件,指定?yàn)證控件等啰嗦的代碼,僅僅一個(gè)【樣式名】就搞定了,當(dāng)然jQuery.Validate還提供許多驗(yàn)證方法,如日期,范圍,最大值,最小值,整數(shù),值比較等多種驗(yàn)證方式,同時(shí)你還可以自定義驗(yàn)證方式(當(dāng)然這種自定義驗(yàn)證方式在初級(jí)篇不會(huì)將到,請(qǐng)期待中級(jí)高級(jí)篇)。
好了,我們點(diǎn)下提交按鈕看下運(yùn)行的效果:

不錯(cuò),果然驗(yàn)證成功了,但是有個(gè)問題,怎么提示信息全是英文的?
我們查看下jQuery.Validate源代碼,在236行果然有提示消息的定義方式,我們就可以進(jìn)行修改這邊的消息改成中文的方式,或者自定義了一個(gè)中文的消息jQuery.Validate.message_cn.js,然后使用jQuery.extend來覆蓋jQuery.Validate自身的消息,代碼如下:
//定義中文消息
var cnmsg = {
required: "必選字段",
remote: "請(qǐng)修正該字段",
email: "請(qǐng)輸入正確格式的電子郵件",
url: "請(qǐng)輸入合法的網(wǎng)址",
date: "請(qǐng)輸入合法的日期",
dateISO: "請(qǐng)輸入合法的日期 (ISO).",
number: "請(qǐng)輸入合法的數(shù)字",
digits: "只能輸入整數(shù)",
creditcard: "請(qǐng)輸入合法的信用卡號(hào)",
equalTo: "請(qǐng)?jiān)俅屋斎胂嗤闹?,
accept: "請(qǐng)輸入擁有合法后綴名的字符串",
maxlength: jQuery.format("請(qǐng)輸入一個(gè)長度最多是 {0} 的字符串"),
minlength: jQuery.format("請(qǐng)輸入一個(gè)長度最少是 {0} 的字符串"),
rangelength: jQuery.format("請(qǐng)輸入一個(gè)長度介于 {0} 和 {1} 之間的字符串"),
range: jQuery.format("請(qǐng)輸入一個(gè)介于 {0} 和 {1} 之間的值"),
max: jQuery.format("請(qǐng)輸入一個(gè)最大為 {0} 的值"),
min: jQuery.format("請(qǐng)輸入一個(gè)最小為 {0} 的值")
};
jQuery.extend(jQuery.validator.messages, cnmsg);
這樣只需在母版頁里引用下jQuery.Validate.message_cn.js就可以把原有的英文提示給替換掉了,2種方式都是可取的,如果你想把jQuery.Validate改造成適合自己的驗(yàn)證控件就是用第1種方式直接改源代碼,如果你只是想用些基本功能不想動(dòng)原來的源代碼就是用第2種方法。
然后我們重新刷新下頁面,果然全變成中文了??聪滦Ч?

注意:這邊錯(cuò)誤提示消息的樣式是可以自己定義的,我就修改了原有的樣式,加上了個(gè)錯(cuò)誤圖標(biāo),更加好看點(diǎn),樣式定義如下:
<style type="text/css">
/************jQuery.Validate插件樣式開始********************/
label.error
{
background: url(images/error.png) no-repeat 0px 0px;
color: Red;
padding-left: 20px;
}
input.error
{
border: dashed 1px red;
}
/************jQuery.Validate插件樣式結(jié)束********************/
</style>
到此,使用jQuery.Validate進(jìn)行客戶端驗(yàn)證的初級(jí)篇就寫完了,具體的代碼大家可以下載下面的源代碼查看,敬請(qǐng)期待中級(jí)篇和高級(jí)篇。
PS:1、代碼中jquery.validate.js為官方版本,而jquery.validate1.js為我修改的版本,關(guān)于修改的內(nèi)容在中級(jí)篇和高級(jí)篇我會(huì)講到。
2、jQuery.Validate僅能做客戶端驗(yàn)證,并不能代替服務(wù)器端驗(yàn)證,為了系統(tǒng)的安全所以服務(wù)器端還是要進(jìn)行驗(yàn)證的。
源代碼下載:點(diǎn)我下載
作者:kyo-yo
- jQuery Validate 驗(yàn)證,校驗(yàn)規(guī)則寫在控件中的具體實(shí)例
- ASP.NET jQuery 實(shí)例16 通過控件CustomValidator驗(yàn)證RadioButtonList
- ASP.NET jQuery 實(shí)例15 通過控件CustomValidator驗(yàn)證CheckBoxList
- 基于jquery實(shí)現(xiàn)的服務(wù)器驗(yàn)證控件的啟用和禁用代碼
- 教你用AngularJS框架一行JS代碼實(shí)現(xiàn)控件驗(yàn)證效果
- js控制.net驗(yàn)證控件是否可用。
- 驗(yàn)證控件與Button的OnClientClick事件詳細(xì)解析
- fileupload控件 文件類型客戶端驗(yàn)證實(shí)現(xiàn)代碼
- asp.net MaxLengthValidator 最大長度驗(yàn)證控件代碼
- jQuery密碼強(qiáng)度驗(yàn)證控件使用詳解
相關(guān)文章
jQuery扁平化風(fēng)格下拉框美化插件FancySelect使用指南
這篇文章主要介紹了jQuery扁平化風(fēng)格下拉框美化插件FancySelect使用指南,需要的朋友可以參考下2015-02-02基于JQuery實(shí)現(xiàn)滾動(dòng)到頁面底端時(shí)自動(dòng)加載更多信息
這篇文章主要介紹了基于JQuery實(shí)現(xiàn)滾動(dòng)到頁面底端時(shí)自動(dòng)加載更多信息,類似微博,新浪新聞的評(píng)論等,都采用了這方法,需要的朋友可以參考下2014-01-01jQuery實(shí)現(xiàn)checkbox全選功能完整實(shí)例
這篇文章主要介紹了jQuery實(shí)現(xiàn)checkbox全選功能,結(jié)合完整實(shí)例形式分析了jQuery事件響應(yīng)及頁面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-07-07jQuery 利用$.ajax 時(shí)獲取原生XMLHttpRequest 對(duì)象的方法
這篇文章主要介紹了jQuery 利用$.ajax 時(shí)獲取原生XMLHttpRequest 對(duì)象的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08jQuery中jqGrid分頁實(shí)現(xiàn)代碼
今天看到j(luò)avaeye上有人使用了jqGrid實(shí)現(xiàn)了數(shù)據(jù)的分頁,參考它的代碼,實(shí)現(xiàn)了這個(gè)功能,搬出來曬曬,作為自己以后學(xué)習(xí)的資料2011-11-11jquery mobile動(dòng)態(tài)添加元素之后不能正確渲染解決方法說明
本篇文章主要是對(duì)jquery mobile動(dòng)態(tài)添加元素之后不能正確渲染解決方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-03-03jQuery實(shí)現(xiàn)圖片左右滾動(dòng)特效
這篇文章主要介紹了jQuery合作伙伴左右滾動(dòng)特效,功能實(shí)現(xiàn)非常簡單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-08-08jQuery插件formValidator自定義函數(shù)擴(kuò)展功能實(shí)例詳解
這篇文章主要介紹了jQuery插件formValidator自定義函數(shù)擴(kuò)展功能,結(jié)合實(shí)例形式分析了jQuery插件formValidator常見的各種判定與驗(yàn)證技巧,非常簡單實(shí)用,需要的朋友可以參考下2015-11-11