欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

從零開(kāi)始學(xué)習(xí)jQuery (十一) 實(shí)戰(zhàn)表單驗(yàn)證與自動(dòng)完成提示插件

 更新時(shí)間:2011年02月23日 23:07:19   作者:  
本文是介紹兩個(gè)最常用的jQuery插件. 分別用于表單驗(yàn)證和自動(dòng)完成提示(類(lèi)似google suggest).

一.摘要

本系列文章將帶您進(jìn)入jQuery的精彩世界, 其中有很多作者具體的使用經(jīng)驗(yàn)和解決方案,  即使你會(huì)使用jQuery也能在閱讀中發(fā)現(xiàn)些許秘籍.

本文是介紹兩個(gè)最常用的jQuery插件. 分別用于表單驗(yàn)證和自動(dòng)完成提示(類(lèi)似google suggest).

二.前言

研究別人的作品真是一件花時(shí)間而且痛苦的過(guò)程. 當(dāng)然也和本人英文不好有關(guān). 總覺(jué)得控件作者寫(xiě)了很多文檔但是都不夠系統(tǒng), 需要深入研究很多的實(shí)例后才能了解作者的思路.所以學(xué)習(xí)和研究一個(gè)插件需要很高成本, 如果發(fā)現(xiàn)了Bug并修復(fù)需要的成本也是未知數(shù)(本次我花了較少的時(shí)間解決了自動(dòng)完成提示插件的一個(gè)中文bug, 但是如果復(fù)雜的bug就不會(huì)這么簡(jiǎn)單了.).

對(duì)于簡(jiǎn)單應(yīng)用我首先推薦上文中的jQuery UI. 但是jQuery UI解決的問(wèn)題有限. 使用jQuery插件是我們最后的一個(gè)好辦法---還算是好辦法, 起碼比自己開(kāi)發(fā)要好吧?

很多jQuery的插件編碼異常優(yōu)美, 看一看藝龍首頁(yè)現(xiàn)在的城市輸入框控件, 除了需要為輸入框手工添加很多很多屬性(onkeyup, onkeydown等等), 而且還不夠通用, 占用服務(wù)器資源和網(wǎng)絡(luò)資源.但是當(dāng)初也是花費(fèi)了很久的時(shí)間完成的作品.

站在巨人的肩膀上, 讓我感覺(jué)寫(xiě)腳本和寫(xiě)設(shè)計(jì)C#程序一樣, 都有高度和深度可以挖掘. 除了使用作者開(kāi)發(fā)好的功能, 還可以學(xué)習(xí)如何開(kāi)發(fā)和封裝javascript控件. 看過(guò)優(yōu)秀的jQuery插件作者的代碼和設(shè)計(jì)思想后, 常常自嘆設(shè)計(jì)水平差距居然如此之大, 增加自認(rèn)為腳本高手, 比較過(guò)后就是C#程序員和架構(gòu)師之間的差距.

希望大家通過(guò)本章節(jié)介紹的兩個(gè)插件, 除了學(xué)會(huì)如何使用,  還能夠略微領(lǐng)悟到如何封裝和設(shè)計(jì)javascript控件.

 

三.表單驗(yàn)證插件 validate

在提交表單前常要對(duì)用戶(hù)輸入進(jìn)行校驗(yàn).ASP.NET的驗(yàn)證控件就是用于此目的, 可以同時(shí)進(jìn)行客戶(hù)端和服務(wù)器端驗(yàn)證. 但是驗(yàn)證控件并沒(méi)有被所有項(xiàng)目采用. 而且在MVC項(xiàng)目中經(jīng)常使用自己的客戶(hù)端驗(yàn)證框架.

在比較了若干表單驗(yàn)證插件后, 決定采用validate插件. 因?yàn)槠涫褂煤?jiǎn)單并且靈活.

插件首頁(yè):

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

插件文檔:

http://docs.jquery.com/Plugins/Validation

配置說(shuō)明:

http://docs.jquery.com/Plugins/Validation/validate#options

1.應(yīng)用實(shí)例

實(shí)例效果:

image

實(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">
    /*========== 必須放在頭部加載的語(yǔ)句塊. 盡量避免使用 ==========*/
  </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;
    }
    /* 出錯(cuò)樣式 */
    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">
    /*==========用戶(hù)自定義方法==========*/


    /*==========事件綁定==========*/
    $(function()
    {

    });

    /*==========加載時(shí)執(zhí)行的語(yǔ)句==========*/
    $(function()
    {
      $("#commentForm").validate(
      {
        errorClass: "error",
        submitHandler: function(form)
        {
          //如果想提交表單, 需要使用form.submit()而不要使用$(form).submit()
          alert("submitted!");
        },
        rules: {
          //為name為email的控件添加兩個(gè)驗(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)證某一個(gè)控件是否滿(mǎn)足某些規(guī)則的方法, 返回一個(gè)boolean值. 比如email( ) 方法驗(yàn)證內(nèi)容是否符合email格式, 符合則返回true. 下面是類(lèi)庫(kù)中email方法的源代碼:

    // http://docs.jquery.com/Plugins/Validation/Methods/email
    email: 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);
    },

我們?cè)?

http://docs.jquery.com/Plugins/Validation

中的 List of built-in Validation methods 一節(jié)中列出了所有內(nèi)置的驗(yàn)證方法. 同時(shí)插件還提供了additional-methods.js 文件, 里面包含了更多的驗(yàn)證方法, 引入后既可啟用.

(2) 驗(yàn)證消息

驗(yàn)證消息就是驗(yàn)證方法失敗后顯示的文字內(nèi)容. 驗(yàn)證消息一定關(guān)聯(lián)在某一個(gè)驗(yàn)證方法上, 并且全局的驗(yàn)證消息保存在jQuery.validator.messages 屬性中.

默認(rèn)的validate類(lèi)庫(kù)自帶英文驗(yàn)證消息:

  messages: {
    required: "This field is required.",  
    //...  
});


上面說(shuō)明當(dāng)required驗(yàn)證方法驗(yàn)證失敗是, 顯示"This field is required."這條消息.

在下載文件的localization文件夾中, 包含了各國(guó)語(yǔ)言的基本驗(yàn)證消息, 如同本實(shí)例一樣引入不同的語(yǔ)言文件即可實(shí)現(xiàn)語(yǔ)言切換:

<script type="text/javascript" src="<% =WebConfig.ResourceServer %>/JsLib/jquery/plugin/jquery.validate/localization/messages_cn.js"></script>

語(yǔ)言文件的內(nèi)容舉例:

jQuery.extend(jQuery.validator.messages, {
    required: "必選字段",
    //...
});

 

現(xiàn)在必填項(xiàng)的問(wèn)題提示就變成了中文.

除了全局默認(rèn)的驗(yàn)證消息, 也可以為某一個(gè)表單元素設(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屬性可以針對(duì)某一個(gè)表單元素設(shè)置驗(yàn)證消息, 第一個(gè)email表示email元素, 值是一個(gè)集合, required就表示required驗(yàn)證函數(shù), 第二個(gè)email表示是email驗(yàn)證函數(shù).

(3)驗(yàn)證規(guī)則

驗(yàn)證規(guī)則就是這樣的語(yǔ)意語(yǔ)句: 在元素A上, 使用 驗(yàn)證方法A 和 驗(yàn)證方法B 進(jìn)行驗(yàn)證.

驗(yàn)證規(guī)則將元素與驗(yàn)證方法關(guān)聯(lián)起來(lái), 因?yàn)轵?yàn)證方法同時(shí)也關(guān)聯(lián)了驗(yàn)證消息, 所以元素與消息也關(guān)聯(lián)了起來(lái).

為一個(gè)元素添加驗(yàn)證規(guī)則有多種方式.

本實(shí)例的"姓名"元素使用了CSS樣式規(guī)則和元素屬性規(guī)則:

<input id="cname" name="name" size="25" class="required" minlength="2" />

class元素屬性設(shè)置元素的CSS樣式類(lèi), 因?yàn)闃邮筋?lèi)中添加了required類(lèi),  所以會(huì)和required()驗(yàn)證函數(shù)關(guān)聯(lián). 這種規(guī)則叫做CSS樣式規(guī)則.

minlength元素屬性也會(huì)自動(dòng)和minlength()驗(yàn)證函數(shù)關(guān)聯(lián), 這種規(guī)則叫做元素屬性規(guī)則.

另外還可以通過(guò)編程的方式進(jìn)行關(guān)聯(lián):

        rules: {
          //為name為email的控件添加兩個(gè)驗(yàn)證方法:required()和email()
          email: { required: true, email: true }
        },

上面的語(yǔ)句表名為email表單對(duì)象添加了required()和email()驗(yàn)證函數(shù).

(4)  表單提交

默認(rèn)情況下, 當(dāng)驗(yàn)證函數(shù)失敗時(shí)表單不會(huì)提交.

但是可以通過(guò)添加class="cancel"的方式讓提交按鈕跳過(guò)驗(yàn)證:

<input type="submit" class="cancel" name="cancel" value="Cancel" />


當(dāng)表單提交時(shí), 會(huì)觸發(fā)options中submitHandler屬性設(shè)置的函數(shù):

        submitHandler: function(form)
        {
          //如果想提交表單, 需要使用form.submit()而不要使用$(form).submit()
          alert("submitted!");
        },

此函數(shù)的簽名同上.  我們可以在這個(gè)函數(shù)中,  編寫(xiě)在表單提交前需要處理的業(yè)務(wù)邏輯.

需要注意當(dāng)最后以編程的方式提交表單時(shí), 一定不要使用jQuery對(duì)象的submit()方法, 因?yàn)榇朔椒〞?huì)觸發(fā)表單驗(yàn)證,并且再次調(diào)用submitHandler設(shè)置的函數(shù), 會(huì)導(dǎo)致遞歸調(diào)用.

此函數(shù)的參數(shù)form就是表單對(duì)象, 用途就是不進(jìn)行驗(yàn)證提交表單:form.submit()

(5) DEBUG模式

在開(kāi)發(fā)階段我們通常不希望表單被真正提交,  雖然可以通過(guò)本實(shí)例中重寫(xiě)submitHandler函數(shù)來(lái)實(shí)現(xiàn), 但是還有更好的方式, 我們可以在submitHandler函數(shù)完成正式提交的邏輯, 然后通過(guò)設(shè)置options的debug屬性, 來(lái)達(dá)到即使驗(yàn)證通過(guò)也不會(huì)提交表單的目的:

$(".selector").validate({
  debug: true
})

(6) 多表單驗(yàn)證

有時(shí)會(huì)在一個(gè)頁(yè)面上出現(xiàn)多個(gè)Form, 因?yàn)関alidate控件是針對(duì)form對(duì)象進(jìn)行包裝的, 所以我們可以控制哪些form對(duì)象需要驗(yàn)證.

同時(shí)為了方便一次設(shè)置頁(yè)面上所有的應(yīng)用了validate控件的form對(duì)象,  提供了 jQuery.validator.setDefaults 函數(shù)讓我們可以一次設(shè)置所有的默認(rèn)值:

jQuery.validator.setDefaults({ 
  debug: true 
});

 

 

四.自動(dòng)完成插件 autocomplete

autocomplete插件能幫助我們實(shí)現(xiàn)類(lèi)似于Google Suggest的效果:

image

插件首頁(yè):

http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/

插件文檔:

http://docs.jquery.com/Plugins/Autocomplete

配置說(shuō)明:

http://docs.jquery.com/Plugins/Autocomplete/autocomplete#toptions

1.應(yīng)用實(shí)例

本實(shí)例演示的是使用autocomplete完成對(duì)輸入城市的自動(dòng)提示效果,如圖:

image

實(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 - 自動(dòng)完成插件實(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">
    /*========== 必須放在頭部加載的語(yǔ)句塊. 盡量避免使用 ==========*/
  </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">請(qǐng)輸入城市拼音和漢字:</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">
    /*==========用戶(hù)自定義方法==========*/
    //城市數(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()
    {
    });

    /*==========加載時(shí)執(zhí)行的語(yǔ)句==========*/
    $(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)自動(dòng)建議的數(shù)據(jù)源. 本實(shí)例是通過(guò)發(fā)送Ajax請(qǐng)求獲取JSON對(duì)象. autocomplete()方法支持兩個(gè)參數(shù), 第一個(gè)是data, 第二個(gè)是options.

其中data參數(shù)可以使本實(shí)例中的一個(gè)數(shù)據(jù)變量, 也可以是一個(gè)url. 如果是url則會(huì)每次都調(diào)用Ajax請(qǐng)求獲取數(shù)據(jù).

為了效率我傾向于在數(shù)據(jù)量允許的情況下, 在頁(yè)面加載后使用Ajax獲取全部的數(shù)據(jù), 然后使用傳遞數(shù)據(jù)變量給autocomplete組件. 如實(shí)例中所示. 除非數(shù)據(jù)特別巨大無(wú)法再客戶(hù)端加載,  則只能每次都使用發(fā)送Ajax請(qǐng)求從服務(wù)器端獲取部分?jǐn)?shù)據(jù). 但是這會(huì)對(duì)服務(wù)器造成負(fù)擔(dān).

(2) 設(shè)置關(guān)鍵函數(shù)

雖然options是可選項(xiàng), 但是對(duì)于我們的數(shù)據(jù)源cityList是一個(gè)多屬性對(duì)象, 所以必須設(shè)置下面幾個(gè)關(guān)鍵的配置項(xiàng)后才能夠使用:

formatItem

對(duì)匹配的每一行數(shù)據(jù)使用此函數(shù)格式化, 返回值是顯示給用戶(hù)的數(shù)據(jù)內(nèi)容.

函數(shù)簽名:

function(row, rowNum, rowCount, searchItem)

參數(shù)說(shuō)明:

row: 當(dāng)前行. the results row,

rowNum: 當(dāng)前行號(hào),從1開(kāi)始.(注意不是索引,索引從0開(kāi)始) the position of the row in the list of results (starting at 1),

rowCount: 總的行號(hào) the number of items in the list of results

searchItem: 查詢(xún)使用的數(shù)據(jù), 即formatMatch函數(shù)返回的數(shù)據(jù)格式的內(nèi)容. 我們?cè)趂ormatMatch函數(shù)中會(huì)設(shè)置程序內(nèi)部搜索時(shí)使用的數(shù)據(jù)格式,這個(gè)格式和給用戶(hù)展示的數(shù)據(jù)是不同的.

formatMatch

對(duì)每一行數(shù)據(jù)使用此函數(shù)格式化需要查詢(xún)的數(shù)據(jù)格式. 返回值是給內(nèi)部搜索算法使用的. 實(shí)例中用戶(hù)看到的匹配結(jié)果是formatItem中設(shè)置的格式, 但是程序內(nèi)部其實(shí)只搜索城市的英文和中文名稱(chēng), 搜索數(shù)據(jù)在formatMatch中定義:

return row.CityNameEn + " " + row.CityName;


函數(shù)簽名:

function(row, rowNum, rowCount,)

參數(shù)說(shuō)明同上

formatResult

此函數(shù)是用戶(hù)選中后返回的數(shù)據(jù)格式. 比如實(shí)例中只返回城市名給input控件:

return row.CityName;


函數(shù)簽名:

function(row, rowNum, rowCount,)

參數(shù)說(shuō)明同上

(3) 為控件添加Result事件函數(shù)

上面3個(gè)函數(shù)無(wú)法實(shí)現(xiàn)這類(lèi)要求: 雖然只返回城市名稱(chēng), 但是查詢(xún)時(shí)使用城市ID, 選中一個(gè)城市后需要將城市ID存儲(chǔ)在一個(gè)隱藏域中.

所以autocomplete控件提供了result事件函數(shù), 此事件會(huì)在用戶(hù)選中某一項(xiàng)后觸發(fā):

      $("#inputCityName").result(function(event, data, formatted)
      {
        $("#inputCityId").val(data.ElongCityId);
      }); 

函數(shù)簽名:

function(event, data, formatted)

參數(shù)列表:

Result事件會(huì)為綁定的事件處理函數(shù)傳遞三個(gè)參數(shù):

event: 事件對(duì)象. event.type為result.

data: 選中的數(shù)據(jù)行.

formatted:   雖然官方的解釋?xiě)?yīng)該是formatResult函數(shù)返回的值, 但是實(shí)驗(yàn)結(jié)果是formatMatch返回的值. 在本實(shí)例為: "Beijing  北京".

(4) 匹配中文

當(dāng)前版本的autocomplete控件對(duì)中文搜索存在Bug, 原因是其搜索事件綁定在keydown事件上, 當(dāng)使用中文輸入法輸入"北"字時(shí)沒(méi)有任何提示. 我對(duì)原庫(kù)做了修改, 將keydown事件修改為keyup事件, 即可完成對(duì)中文的智能提示搜索. 另外主要需要將"matchContains"配置項(xiàng)設(shè)置為"true", 因?yàn)槲覀兊乃阉鞲袷绞?Beijing 北京", 默認(rèn)只匹配開(kāi)頭的字符.

(5) 更多配置項(xiàng)

關(guān)于更多的配置項(xiàng), 請(qǐ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)證插件和自動(dòng)完成插件, 目前大家可以搜索到很多的插件應(yīng)用, 或者上千的插件列表, 但是卻找不到詳細(xì)的使用文檔. 插件用起來(lái)簡(jiǎn)單但是真正的靈活應(yīng)用卻不容易, 除了要翻越英文文檔學(xué)習(xí)基本的使用, 還要花很長(zhǎng)時(shí)間了解各個(gè)參數(shù)的作用, 如何配合使用等. 并且在上面做二次開(kāi)發(fā)的難度相對(duì)較大, 插件的核心代碼多沒(méi)有注釋并且復(fù)雜,  要在其中尋找邏輯關(guān)系要花費(fèi)很多時(shí)間和精力. 本文介紹的兩個(gè)插件更多的細(xì)節(jié)請(qǐng)參考官方文檔, 地址都在一開(kāi)始為大家提供了.

后續(xù)文章我決定先進(jìn)行jQuery技巧和javascript必備知識(shí)的講解,  我們很少開(kāi)發(fā)自定義插件所以將開(kāi)發(fā)插件篇放在最后.

本章節(jié)代碼下載:http://xiazai.jb51.net/201101/yuanma/Code-jQueryStudy-11.rar

相關(guān)文章

  • jQuery Position方法使用和兼容性

    jQuery Position方法使用和兼容性

    position方法獲取匹配元素相對(duì)父元素的偏移。接下來(lái)通過(guò)本文給大家分享jQuery Position方法使用和兼容性的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2017-08-08
  • jQuery控制TR顯示隱藏的三種常用方法

    jQuery控制TR顯示隱藏的三種常用方法

    第一種方法是使用id,第二種方法是使用$.each(),第三種方法是通過(guò)屬性篩選器,還有很多,大家自家挖掘吧
    2014-08-08
  • jquery使用remove()方法刪除指定class子元素

    jquery使用remove()方法刪除指定class子元素

    這篇文章主要介紹了jquery使用remove()方法刪除指定class子元素的方法,可實(shí)現(xiàn)刪除指定元素下指定class的子元素功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • jQuery 絕對(duì)入門(mén)

    jQuery 絕對(duì)入門(mén)

    對(duì)于想學(xué)習(xí)jquery 的朋友可以看下這樣的入門(mén)級(jí)文章。
    2009-04-04
  • 獲取jqGrid中選擇的行的數(shù)據(jù)

    獲取jqGrid中選擇的行的數(shù)據(jù)

    本文主要介紹了獲取jqGrid中選擇的行的數(shù)據(jù)的語(yǔ)法和獲取簡(jiǎn)例,需要的朋友可以看下
    2016-11-11
  • 一次失敗的jQuery優(yōu)化嘗試小結(jié)

    一次失敗的jQuery優(yōu)化嘗試小結(jié)

    我經(jīng)常抱怨jQuery的DOM操作性能并不優(yōu)秀,并且經(jīng)常嘗試用一些方法去進(jìn)行優(yōu)化,但是越是優(yōu)化,越是沮喪地發(fā)現(xiàn)jQuery其實(shí)已經(jīng)做得很好,從使用者的角度能夠進(jìn)行的優(yōu)化實(shí)在有限
    2011-02-02
  • jquery中有哪些api jQuery主要API

    jquery中有哪些api jQuery主要API

    jquery有很多的API事件,本文小編給大家整理了jquery中最主要的API函數(shù)集合。
    2017-11-11
  • 利用JQuery阻止事件冒泡

    利用JQuery阻止事件冒泡

    冒泡事件就是點(diǎn)擊子節(jié)點(diǎn),會(huì)向上觸發(fā)父節(jié)點(diǎn),祖先節(jié)點(diǎn)的點(diǎn)擊事件。本文主要介紹JQuery阻止事件冒泡的實(shí)例解析。需要的朋友來(lái)看下吧
    2016-12-12
  • 原生javascript實(shí)現(xiàn)的分頁(yè)插件pagenav

    原生javascript實(shí)現(xiàn)的分頁(yè)插件pagenav

    這幾天要做一個(gè)前臺(tái)頁(yè)面,涉及到分頁(yè),不想自己去寫(xiě)所以在網(wǎng)上找jquery看有沒(méi)有好用一點(diǎn)的分頁(yè)組件,結(jié)果發(fā)現(xiàn)有很多,但是都很麻煩,看到了這個(gè)叫pagenav的發(fā)現(xiàn)相對(duì)來(lái)說(shuō)還是很容易上手的,于是就直接用了,在我看來(lái),能解決問(wèn)題的辦法就是好辦法.越簡(jiǎn)單越好.
    2014-08-08
  • jQuery實(shí)現(xiàn)ajax的疊加和停止(終止ajax請(qǐng)求)

    jQuery實(shí)現(xiàn)ajax的疊加和停止(終止ajax請(qǐng)求)

    這篇文章主要介紹了jQuery實(shí)現(xiàn)ajax的疊加和停止的關(guān)鍵代碼,代碼簡(jiǎn)單易懂,需要的朋友可以參考下
    2016-08-08

最新評(píng)論