从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
本系列文章導(dǎo)航
從零開始學(xué)習(xí)jQuery (一) 開天辟地入門篇
從零開始學(xué)習(xí)jQuery (二) 萬能的選擇器
從零開始學(xué)習(xí)jQuery (三) 管理jQuery包裝集
從零開始學(xué)習(xí)jQuery (四) 使用jQuery操作元素的屬性與樣式
從零開始學(xué)習(xí)jQuery (五) 事件與事件對象
從零開始學(xué)習(xí)jQuery (六) jQuery中的Ajax
從零開始學(xué)習(xí)jQuery (七) jQuery動畫-讓頁面動起來!
從零開始學(xué)習(xí)jQuery (八) 插播:jQuery實(shí)施方案
從零開始學(xué)習(xí)jQuery (九) jQuery工具函數(shù)
從零開始學(xué)習(xí)jQuery (十) jQueryUI常用功能實(shí)戰(zhàn)
從零開始學(xué)習(xí)jQuery (十一) 實(shí)戰(zhàn)表單驗(yàn)證與自動完成提示插件
?
一.摘要
本系列文章將帶您進(jìn)入jQuery的精彩世界, 其中有很多作者具體的使用經(jīng)驗(yàn)和解決方案,? 即使你會使用jQuery也能在閱讀中發(fā)現(xiàn)些許秘籍.
本文是介紹兩個最常用的jQuery插件. 分別用于表單驗(yàn)證和自動完成提示(類似google suggest).
?
二.前言
研究別人的作品真是一件花時間而且痛苦的過程. 當(dāng)然也和本人英文不好有關(guān). 總覺得控件作者寫了很多文檔但是都不夠系統(tǒng), 需要深入研究很多的實(shí)例后才能了解作者的思路.所以學(xué)習(xí)和研究一個插件需要很高成本, 如果發(fā)現(xiàn)了Bug并修復(fù)需要的成本也是未知數(shù)(本次我花了較少的時間解決了自動完成提示插件的一個中文bug, 但是如果復(fù)雜的bug就不會這么簡單了.).
對于簡單應(yīng)用我首先推薦上文中的jQuery UI. 但是jQuery UI解決的問題有限. 使用jQuery插件是我們最后的一個好辦法---還算是好辦法, 起碼比自己開發(fā)要好吧?
很多jQuery的插件編碼異常優(yōu)美, 看一看藝龍首頁現(xiàn)在的城市輸入框控件, 除了需要為輸入框手工添加很多很多屬性(onkeyup, onkeydown等等), 而且還不夠通用, 占用服務(wù)器資源和網(wǎng)絡(luò)資源.但是當(dāng)初也是花費(fèi)了很久的時間完成的作品.
站在巨人的肩膀上, 讓我感覺寫腳本和寫設(shè)計C#程序一樣, 都有高度和深度可以挖掘. 除了使用作者開發(fā)好的功能, 還可以學(xué)習(xí)如何開發(fā)和封裝javascript控件. 看過優(yōu)秀的jQuery插件作者的代碼和設(shè)計思想后, 常常自嘆設(shè)計水平差距居然如此之大, 增加自認(rèn)為腳本高手, 比較過后就是C#程序員和架構(gòu)師之間的差距.
希望大家通過本章節(jié)介紹的兩個插件, 除了學(xué)會如何使用,? 還能夠略微領(lǐng)悟到如何封裝和設(shè)計javascript控件.
?
三.表單驗(yàn)證插件 validate
在提交表單前常要對用戶輸入進(jìn)行校驗(yàn).ASP.NET的驗(yàn)證控件就是用于此目的, 可以同時進(jìn)行客戶端和服務(wù)器端驗(yàn)證. 但是驗(yàn)證控件并沒有被所有項(xiàng)目采用. 而且在MVC項(xiàng)目中經(jīng)常使用自己的客戶端驗(yàn)證框架.
在比較了若干表單驗(yàn)證插件后, 決定采用validate插件. 因?yàn)槠涫褂煤唵尾⑶异`活.
插件首頁:
http://bassistance.de/jquery-plugins/jquery-plugin-validation/
插件文檔:
http://docs.jquery.com/Plugins/Validation
配置說明:
http://docs.jquery.com/Plugins/Validation/validate#options
1.應(yīng)用實(shí)例
實(shí)例效果:
實(shí)例代碼:
<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"><title>jQuery PlugIn - 表單驗(yàn)證插件實(shí)例 Validate </title><!--black-tie,blitzer,blitzer,dot-luv,excite-bike,hot-sneaks,humanity,mint-choc,redmond,smoothness,south-street,start,swanky-purse,trontastic,ui-darkness,ui-lightness,vader--><link rel="stylesheet" type="text/css" href="<%=WebConfig.ResourceServer +"/JsLib/jquery/themes/redmond/style.css"%>" /><script type="text/javascript" src="<% =WebConfig.ResourceServer %>/JsLib/jquery/jquery-min-lastest.js"></script><script type="text/javascript" src="<% =WebConfig.ResourceServer %>/JsLib/jquery/ui/jquery-ui-all-min-lastest.js"></script><script type="text/javascript" src="<% =WebConfig.ResourceServer %>/JsLib/jquery/plugin/jquery.validate/jquery.validate.min.js"></script><script type="text/javascript" src="<% =WebConfig.ResourceServer %>/JsLib/jquery/plugin/jquery.validate/localization/messages_cn.js"></script><% if (false){%><script src="~/js/jquery-vsdoc-lastest.js" type="text/javascript"></script><% }%><script type="text/javascript">/*========== 必須放在頭部加載的語句塊. 盡量避免使用 ==========*/</script><style type="text/css">body{font-size:12px;}/* form中顯示文字的label */.slabel{width:100px;display: -moz-inline-box;line-height: 1.8;display: inline-block;text-align:right;}/* 出錯樣式 */input.error, textarea.error{border: solid 1px #CD0A0A;}label.error{color:#CD0A0A;margin-left:5px;}/* 深紅色文字 */.textred{color:#CD0A0A;}</style> </head> <body><form id="commentForm" method="get" action=""><fieldset style="width:500px;"><legend>表單驗(yàn)證</legend><p><label for="cname" class="slabel"><em class="textred">*</em> 姓名:</label><input id="cname" name="name" size="25" class="required" minlength="2" /></p><p><label for="cemail" class="slabel"><em class="textred">*</em> E-Mail:</label><input id="cemail" name="email" size="25"/></p><p><label for="curl" class="slabel">網(wǎng)址:</label> <input id="curl" name="url" size="25" class="url" value="" /></p><p><label for="ccomment" class="slabel"><em class="textred">*</em> 內(nèi)容:</label><textarea rows="2" id="ccomment" name="comment" cols="20" class="required" style="height:80px;"></textarea></p><p style="text-align:center;"><input class="submit" type="submit" value="提交" /></p></fieldset></form><script type="text/javascript">/*==========用戶自定義方法==========*//*==========事件綁定==========*/$(function(){});/*==========加載時執(zhí)行的語句==========*/$(function(){$("#commentForm").validate({errorClass: "error",submitHandler: function(form){//如果想提交表單, 需要使用form.submit()而不要使用$(form).submit()alert("submitted!");},rules: {//為name為email的控件添加兩個驗(yàn)證方法:required()和email()email: { required: true, email: true }},messages: {//為name為email的控件的required()和email()驗(yàn)證方法設(shè)置驗(yàn)證失敗的消息內(nèi)容email: {required:"需要輸入電子郵箱", email:"電子郵箱格式不正確"}}});}); </script> </body> </html>?
2. 實(shí)例講解
(1) 驗(yàn)證方法
驗(yàn)證方法是驗(yàn)證某一個控件是否滿足某些規(guī)則的方法, 返回一個boolean值. 比如email( )?方法驗(yàn)證內(nèi)容是否符合email格式, 符合則返回true. 下面是類庫中email方法的源代碼:
// http://docs.jquery.com/Plugins/Validation/Methods/emailemail: function(value, element) {// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);},我們在:
http://docs.jquery.com/Plugins/Validation
中的?List of built-in Validation methods?一節(jié)中列出了所有內(nèi)置的驗(yàn)證方法. 同時插件還提供了additional-methods.js 文件, 里面包含了更多的驗(yàn)證方法, 引入后既可啟用.
(2) 驗(yàn)證消息
驗(yàn)證消息就是驗(yàn)證方法失敗后顯示的文字內(nèi)容. 驗(yàn)證消息一定關(guān)聯(lián)在某一個驗(yàn)證方法上, 并且全局的驗(yàn)證消息保存在jQuery.validator.messages 屬性中.
默認(rèn)的validate類庫自帶英文驗(yàn)證消息:
messages: {required: "This field is required.", //... });
上面說明當(dāng)required驗(yàn)證方法驗(yàn)證失敗是, 顯示"This field is required."這條消息.
在下載文件的localization文件夾中, 包含了各國語言的基本驗(yàn)證消息, 如同本實(shí)例一樣引入不同的語言文件即可實(shí)現(xiàn)語言切換:
<script type="text/javascript" src="<% =WebConfig.ResourceServer %>/JsLib/jquery/plugin/jquery.validate/localization/messages_cn.js"></script>語言文件的內(nèi)容舉例:
jQuery.extend(jQuery.validator.messages, {required: "必選字段",//... });?
現(xiàn)在必填項(xiàng)的問題提示就變成了中文.
除了全局默認(rèn)的驗(yàn)證消息, 也可以為某一個表單元素設(shè)置特有的驗(yàn)證消息, 比如本文實(shí)例中, 為email元素設(shè)置了特有的驗(yàn)證消息:
messages: {//為name為email的控件的required()和email()驗(yàn)證方法設(shè)置驗(yàn)證失敗的消息內(nèi)容email: {required:"需要輸入電子郵箱", email:"電子郵箱格式不正確"}?
options的messages屬性可以針對某一個表單元素設(shè)置驗(yàn)證消息, 第一個email表示email元素, 值是一個集合, required就表示required驗(yàn)證函數(shù), 第二個email表示是email驗(yàn)證函數(shù).
(3)驗(yàn)證規(guī)則
驗(yàn)證規(guī)則就是這樣的語意語句: 在元素A上, 使用 驗(yàn)證方法A 和 驗(yàn)證方法B 進(jìn)行驗(yàn)證.
驗(yàn)證規(guī)則將元素與驗(yàn)證方法關(guān)聯(lián)起來, 因?yàn)轵?yàn)證方法同時也關(guān)聯(lián)了驗(yàn)證消息, 所以元素與消息也關(guān)聯(lián)了起來.
為一個元素添加驗(yàn)證規(guī)則有多種方式.
本實(shí)例的"姓名"元素使用了CSS樣式規(guī)則和元素屬性規(guī)則:
<input id="cname" name="name" size="25" class="required" minlength="2" />class元素屬性設(shè)置元素的CSS樣式類, 因?yàn)闃邮筋愔刑砑恿藃equired類,? 所以會和required()驗(yàn)證函數(shù)關(guān)聯(lián). 這種規(guī)則叫做CSS樣式規(guī)則.
minlength元素屬性也會自動和minlength()驗(yàn)證函數(shù)關(guān)聯(lián), 這種規(guī)則叫做元素屬性規(guī)則.
另外還可以通過編程的方式進(jìn)行關(guān)聯(lián):
rules: {//為name為email的控件添加兩個驗(yàn)證方法:required()和email()email: { required: true, email: true }},上面的語句表名為email表單對象添加了required()和email()驗(yàn)證函數(shù).
(4)? 表單提交
默認(rèn)情況下, 當(dāng)驗(yàn)證函數(shù)失敗時表單不會提交.
但是可以通過添加class="cancel"的方式讓提交按鈕跳過驗(yàn)證:
<input type="submit" class="cancel" name="cancel" value="Cancel" />
當(dāng)表單提交時, 會觸發(fā)options中submitHandler屬性設(shè)置的函數(shù):
此函數(shù)的簽名同上.? 我們可以在這個函數(shù)中,? 編寫在表單提交前需要處理的業(yè)務(wù)邏輯.
需要注意當(dāng)最后以編程的方式提交表單時, 一定不要使用jQuery對象的submit()方法, 因?yàn)榇朔椒〞|發(fā)表單驗(yàn)證,并且再次調(diào)用submitHandler設(shè)置的函數(shù), 會導(dǎo)致遞歸調(diào)用.
此函數(shù)的參數(shù)form就是表單對象, 用途就是不進(jìn)行驗(yàn)證提交表單:form.submit()
(5) DEBUG模式
在開發(fā)階段我們通常不希望表單被真正提交,? 雖然可以通過本實(shí)例中重寫submitHandler函數(shù)來實(shí)現(xiàn), 但是還有更好的方式, 我們可以在submitHandler函數(shù)完成正式提交的邏輯, 然后通過設(shè)置options的debug屬性, 來達(dá)到即使驗(yàn)證通過也不會提交表單的目的:
$(".selector").validate({debug: true })
(6) 多表單驗(yàn)證
有時會在一個頁面上出現(xiàn)多個Form, 因?yàn)関alidate控件是針對form對象進(jìn)行包裝的, 所以我們可以控制哪些form對象需要驗(yàn)證.
同時為了方便一次設(shè)置頁面上所有的應(yīng)用了validate控件的form對象,? 提供了 jQuery.validator.setDefaults?函數(shù)讓我們可以一次設(shè)置所有的默認(rèn)值:
jQuery.validator.setDefaults({ debug: true });?
?
四.自動完成插件 autocomplete
autocomplete插件能幫助我們實(shí)現(xiàn)類似于Google Suggest的效果:
插件首頁:
http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/
插件文檔:
http://docs.jquery.com/Plugins/Autocomplete
配置說明:
http://docs.jquery.com/Plugins/Autocomplete/autocomplete#toptions
1.應(yīng)用實(shí)例
本實(shí)例演示的是使用autocomplete完成對輸入城市的自動提示效果,如圖:
實(shí)例代碼:
<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"><title>jQuery PlugIn - 自動完成插件實(shí)例 AutoComplete </title><!--black-tie,blitzer,blitzer,dot-luv,excite-bike,hot-sneaks,humanity,mint-choc,redmond,smoothness,south-street,start,swanky-purse,trontastic,ui-darkness,ui-lightness,vader--><link rel="stylesheet" type="text/css" href="<%=WebConfig.ResourceServer +"/JsLib/jquery/themes/redmond/style.css"%>" /><link rel="stylesheet" type="text/css" href="<%=WebConfig.ResourceServer +"/JsLib/jquery/plugin/jquery.autocomplete/jquery.autocomplete.css"%>" /><script type="text/javascript" src="<% =WebConfig.ResourceServer %>/JsLib/jquery/jquery-min-lastest.js"></script><script type="text/javascript" src="<% =WebConfig.ResourceServer %>/JsLib/jquery/ui/jquery-ui-all-min-lastest.js"></script><script type="text/javascript" src="<% =WebConfig.ResourceServer %>/JsLib/jquery/plugin/jquery.autocomplete/jquery.autocomplete.min.js"></script><% if (false){%><script src="~/js/jquery-vsdoc-lastest.js" type="text/javascript"></script><% }%><script type="text/javascript">/*========== 必須放在頭部加載的語句塊. 盡量避免使用 ==========*/</script><style type="text/css">body{font-size: 12px;}.formLabel{float: left; width: 150px; text-align:right;}.formInput{float: left;}</style> </head> <body><!-- Demo. 應(yīng)用AutoComplete插件 --><div class="ui-widget ui-widget-content ui-corner-all" style="width: 700px; padding: 5px;"><h3>Demo. 應(yīng)用AutoComplete插件 </h3><br style="clear: both" /><div class="formLabel"><label for="inputCityName">請輸入城市拼音和漢字:</label></div><div class="formInput"><input id="inputCityName" name="inputCityName" type="text" /></div><br style="clear:both" /><br style="clear: both" /><div class="formLabel"><label for="inputCityName">城市ID:</label></div><div class="formInput"><input id="inputCityId" name="inputCityId" type="text" /></div><br style="clear: both" /><br style="clear: both" /></div><script type="text/javascript">/*==========用戶自定義方法==========*///城市數(shù)據(jù)var cityList;//autocomplete選項(xiàng)var options = {minChars: 1,max: 500,width: 250,matchContains: true,formatItem: function(row, i, max){return i + "/" + max + ": \"" + row.CityNameEn + "\" [" + row.CityName + "]";},formatMatch: function(row, i, max){return row.CityNameEn + " " + row.CityName;},formatResult: function(row){return row.CityName;} };//autocomplete初始化函數(shù)function initAutoComplete(data){cityList = data;$("#inputCityName").autocomplete(cityList, options);$("#inputCityName").result(function(event, data, formatted){$("#inputCityId").val(data.ElongCityId);}); }/*==========事件綁定==========*/$(function(){});/*==========加載時執(zhí)行的語句==========*/$(function(){//加載城市數(shù)據(jù), 并在回調(diào)函數(shù)中用返回的數(shù)據(jù)初始化autocomplete$.getJSON("cityinfo.htm", null, initAutoComplete) }); </script> </body> </html>
?
2. 實(shí)例講解
(1)準(zhǔn)備數(shù)據(jù)源
首先要準(zhǔn)備實(shí)現(xiàn)自動建議的數(shù)據(jù)源. 本實(shí)例是通過發(fā)送Ajax請求獲取JSON對象. autocomplete()方法支持兩個參數(shù), 第一個是data, 第二個是options.
其中data參數(shù)可以使本實(shí)例中的一個數(shù)據(jù)變量, 也可以是一個url. 如果是url則會每次都調(diào)用Ajax請求獲取數(shù)據(jù).
為了效率我傾向于在數(shù)據(jù)量允許的情況下, 在頁面加載后使用Ajax獲取全部的數(shù)據(jù), 然后使用傳遞數(shù)據(jù)變量給autocomplete組件. 如實(shí)例中所示. 除非數(shù)據(jù)特別巨大無法再客戶端加載,? 則只能每次都使用發(fā)送Ajax請求從服務(wù)器端獲取部分?jǐn)?shù)據(jù). 但是這會對服務(wù)器造成負(fù)擔(dān).
(2) 設(shè)置關(guān)鍵函數(shù)
雖然options是可選項(xiàng), 但是對于我們的數(shù)據(jù)源cityList是一個多屬性對象, 所以必須設(shè)置下面幾個關(guān)鍵的配置項(xiàng)后才能夠使用:
formatItem
對匹配的每一行數(shù)據(jù)使用此函數(shù)格式化, 返回值是顯示給用戶的數(shù)據(jù)內(nèi)容.
函數(shù)簽名:
function(row, rowNum, rowCount, searchItem)
參數(shù)說明:
row: 當(dāng)前行. the results row,
rowNum: 當(dāng)前行號,從1開始.(注意不是索引,索引從0開始) the position of the row in the list of results (starting at 1),
rowCount: 總的行號 the number of items in the list of results
searchItem: 查詢使用的數(shù)據(jù), 即formatMatch函數(shù)返回的數(shù)據(jù)格式的內(nèi)容. 我們在formatMatch函數(shù)中會設(shè)置程序內(nèi)部搜索時使用的數(shù)據(jù)格式,這個格式和給用戶展示的數(shù)據(jù)是不同的.
formatMatch
對每一行數(shù)據(jù)使用此函數(shù)格式化需要查詢的數(shù)據(jù)格式. 返回值是給內(nèi)部搜索算法使用的. 實(shí)例中用戶看到的匹配結(jié)果是formatItem中設(shè)置的格式, 但是程序內(nèi)部其實(shí)只搜索城市的英文和中文名稱, 搜索數(shù)據(jù)在formatMatch中定義:
return row.CityNameEn + " " + row.CityName;
函數(shù)簽名:
function(row, rowNum, rowCount,)
參數(shù)說明同上
formatResult
此函數(shù)是用戶選中后返回的數(shù)據(jù)格式. 比如實(shí)例中只返回城市名給input控件:
return row.CityName;
函數(shù)簽名:
function(row, rowNum, rowCount,)
參數(shù)說明同上
(3) 為控件添加Result事件函數(shù)
上面3個函數(shù)無法實(shí)現(xiàn)這類要求: 雖然只返回城市名稱, 但是查詢時使用城市ID, 選中一個城市后需要將城市ID存儲在一個隱藏域中.
所以autocomplete控件提供了result事件函數(shù), 此事件會在用戶選中某一項(xiàng)后觸發(fā):
$("#inputCityName").result(function(event, data, formatted){$("#inputCityId").val(data.ElongCityId);});函數(shù)簽名:
function(event, data, formatted)
參數(shù)列表:
Result事件會為綁定的事件處理函數(shù)傳遞三個參數(shù):
event: 事件對象. event.type為result.
data: 選中的數(shù)據(jù)行.
formatted:?? 雖然官方的解釋應(yīng)該是formatResult函數(shù)返回的值, 但是實(shí)驗(yàn)結(jié)果是formatMatch返回的值. 在本實(shí)例為: "Beijing? 北京".
(4) 匹配中文
當(dāng)前版本的autocomplete控件對中文搜索存在Bug, 原因是其搜索事件綁定在keydown事件上, 當(dāng)使用中文輸入法輸入"北"字時沒有任何提示. 我對原庫做了修改, 將keydown事件修改為keyup事件, 即可完成對中文的智能提示搜索. 另外主要需要將"matchContains"配置項(xiàng)設(shè)置為"true", 因?yàn)槲覀兊乃阉鞲袷绞?#34;Beijing 北京", 默認(rèn)只匹配開頭的字符.
(5) 更多配置項(xiàng)
關(guān)于更多的配置項(xiàng), 請參考官方文檔:
http://docs.jquery.com/Plugins/Autocomplete/autocomplete#toptions
(6) 更多事件
除了上面介紹的autocomplete()和result()函數(shù), 還有如下函數(shù):
search( )?:?激活search事件
flushCache( )?:?清空緩存
setOptions( options )?:?設(shè)置配置項(xiàng)
?
五.總結(jié)
本文詳細(xì)介紹了表單驗(yàn)證插件和自動完成插件, 目前大家可以搜索到很多的插件應(yīng)用, 或者上千的插件列表, 但是卻找不到詳細(xì)的使用文檔. 插件用起來簡單但是真正的靈活應(yīng)用卻不容易, 除了要翻越英文文檔學(xué)習(xí)基本的使用, 還要花很長時間了解各個參數(shù)的作用, 如何配合使用等. 并且在上面做二次開發(fā)的難度相對較大, 插件的核心代碼多沒有注釋并且復(fù)雜,? 要在其中尋找邏輯關(guān)系要花費(fèi)很多時間和精力. 本文介紹的兩個插件更多的細(xì)節(jié)請參考官方文檔, 地址都在一開始為大家提供了.
后續(xù)文章我決定先進(jìn)行jQuery技巧和javascript必備知識的講解,? 我們很少開發(fā)自定義插件所以將開發(fā)插件篇放在最后.
?
本章節(jié)代碼下載:
http://files.cnblogs.com/zhangziqiu/Code-jQueryStudy-11.rar
作者:張子秋出處:http://www.cnblogs.com/zhangziqiu/
總結(jié)
以上是生活随笔為你收集整理的从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零开始学习jQuery (十) jQu
- 下一篇: Intellij Idea/Websto