jQuery UI API - 自動完成部件(Autocomplete Widget)
所屬類別
用法
描述:自動完成功能根據(jù)用戶輸入值進行搜索和過濾,讓用戶快速找到并從預設值列表中選擇。
版本新增:1.8
任何可以接收輸入的字段都可以轉(zhuǎn)換為 Autocomplete,即,<input>
元素,<textarea>
元素及帶有 contenteditable
屬性的元素。
通過給 Autocomplete 字段焦點或者在其中輸入字符,插件開始搜索匹配的條目并顯示供選擇的值的列表。通過輸入更多的字符,用戶可以過濾列表以獲得更好的匹配。
該部件可用于選擇先前選定的值,比如輸入文章標簽或者輸入從地址簿中輸入地址郵件地址。Autocomplete 也可以用來填充相關的信息,比如輸入一個城市的名稱來獲得該城市的郵政編碼。
您可以從本地源或者遠程源獲取數(shù)據(jù):本地源適用于小數(shù)據(jù)集,例如,帶有 50 個條目的地址簿;遠程源適用于大數(shù)據(jù)集,比如,帶有數(shù)百個或者成千上萬個條目的數(shù)據(jù)庫。如需了解更多有關自定義數(shù)據(jù)源的信息,請查看 source
選項的文檔。
鍵盤交互
當菜單打開時,下面的鍵盤命令可用:
- UP - 移動焦點到上一個項目。如果在第一個項目上,則移動焦點到輸入(input)。如果在輸入(input)上,則移動焦點到最后一個項目。
- DOWN - 移動焦點到下一個項目。如果在最后一個項目上,則移動焦點到輸入(input)。如果在輸入(input)上,則移動焦點到第一個項目。
- ESCAPE - 關閉菜單。
- ENTER - 選擇當前獲得焦點的項目,并關閉菜單。
- TAB - 選擇當前獲得焦點的項目,關閉菜單,并移動焦點到下一個可聚焦(focusable)的元素。
- PAGE UP/DOWN - 滾動一屏的項目(基于菜單的高度)。
當菜單關閉時,下面的鍵盤命令可用:
- UP/DOWN - 如果滿足
minLength
,則打開菜單。
主題化
自動完成部件(Autocomplete Widget)使用 jQuery UI CSS 框架 來定義它的外觀和感觀的樣式。如果需要使用自動完成部件指定的樣式,則可以使用下面的 CSS class 名稱:
ui-autocomplete
:用于顯示匹配用戶的 菜單(menu)ui-autocomplete-input
:自動完成部件(Autocomplete Widget)實例化的 input 元素。
依賴
附加說明
- 該部件要求一些功能性的 CSS,否則將無法工作。如果您創(chuàng)建了一個自定義的主題,請使用小部件指定的 CSS 文件作為起點。
- 該部件以編程方式操作元素的值,因此當元素的值改變時不會觸發(fā)原生的
change
事件。
快速導航
選項 | 方法 | 擴展點 | 事件 |
---|---|---|---|
選項 | 類型 | 描述 | 默認值 |
---|---|---|---|
appendTo | Selector | 菜單應該被附加到哪一個元素。當該值為 null 時,輸入域的父元素將檢查 ui-front class。如果找到帶有 ui-front class 的元素,菜單將被附加到該元素。如果未找到帶有 ui-front class 的元素,不管值為多少,菜單將被附加到 body。注意:當建議菜單打開時, 代碼實例: 初始化帶有指定 $( ".selector" ).autocomplete({ appendTo: "#someElem" }); 在初始化后,獲取或設置 // getter var appendTo = $( ".selector" ).autocomplete( "option", "appendTo" ); // setter $( ".selector" ).autocomplete( "option", "appendTo", "#someElem" ); |
null |
autoFocus | Boolean | 如果設置為 true ,當菜單顯示時,第一個條目將自動獲得焦點。代碼實例: 初始化帶有指定 $( ".selector" ).autocomplete({ autoFocus: true }); 在初始化后,獲取或設置 // getter var autoFocus = $( ".selector" ).autocomplete( "option", "autoFocus" ); // setter $( ".selector" ).autocomplete( "option", "autoFocus", true ); |
false |
delay | Integer | 按鍵和執(zhí)行搜索之間的延遲,以毫秒計。對于本地數(shù)據(jù),采用零延遲是有意義的(更具響應性),但對于遠程數(shù)據(jù)會產(chǎn)生大量的負荷,同時降低了響應性。 代碼實例: 初始化帶有指定 $( ".selector" ).autocomplete({ delay: 500 }); 在初始化后,獲取或設置 // getter var delay = $( ".selector" ).autocomplete( "option", "delay" ); // setter $( ".selector" ).autocomplete( "option", "delay", 500 ); |
300 |
disabled | Boolean | 如果設置為 true ,則禁用該 autocomplete。代碼實例: 初始化帶有指定 $( ".selector" ).autocomplete({ disabled: true }); 在初始化后,獲取或設置 // getter var disabled = $( ".selector" ).autocomplete( "option", "disabled" ); // setter $( ".selector" ).autocomplete( "option", "disabled", true ); |
false |
minLength | Integer | 執(zhí)行搜索前用戶必須輸入的最小字符數(shù)。對于僅帶有幾項條目的本地數(shù)據(jù),通常設置為零,但是當單個字符搜索會匹配幾千項條目時,設置個高數(shù)值是很有必要的。 代碼實例: 初始化帶有指定 $( ".selector" ).autocomplete({ minLength: 0 }); 在初始化后,獲取或設置 // getter var minLength = $( ".selector" ).autocomplete( "option", "minLength" ); // setter $( ".selector" ).autocomplete( "option", "minLength", 0 ); |
1 |
position | Object | 標識建議菜單的位置與相關的 input 元素有關系。of 選項默認為 input 元素,但是您可以指定另一個定位元素。如需了解各種選項的更多細節(jié),請查看 jQuery UI 定位(Position)。代碼實例: 初始化帶有指定 $( ".selector" ).autocomplete({ position: { my : "right top", at: "right bottom" } }); 在初始化后,獲取或設置 // getter var position = $( ".selector" ).autocomplete( "option", "position" ); // setter $( ".selector" ).autocomplete( "option", "position", { my : "right top", at: "right bottom" } ); |
{ my: "left top", at: "left bottom", collision: "none" } |
source | Array 或 String 或 Function( Object request, Function response( Object data ) ) | 定義要使用的數(shù)據(jù),必須指定。 獨立于您要使用的變量,標簽總是被視為文本。如果您想要標簽被視為 html,您可以使用 Scott González' html 擴展。演示側重于 支持多個類型:
代碼實例: 初始化帶有指定 $( ".selector" ).autocomplete({ source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] }); 在初始化后,獲取或設置 // getter var source = $( ".selector" ).autocomplete( "option", "source" ); // setter $( ".selector" ).autocomplete( "option", "source", [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] ); |
none; must be specified |
方法 | 返回 | 描述 |
---|---|---|
close() | jQuery (plugin only) | 關閉 Autocomplete 菜單。當與 search 方法結合使用時,可用于關閉打開的菜單。
代碼實例: 調(diào)用 close 方法: $( ".selector" ).autocomplete( "close" ); |
destroy() | jQuery (plugin only) | 完全移除 autocomplete 功能。這會把元素返回到它的預初始化狀態(tài)。
代碼實例: 調(diào)用 destroy 方法: $( ".selector" ).autocomplete( "destroy" ); |
disable() | jQuery (plugin only) | 禁用 autocomplete。
代碼實例: 調(diào)用 disable 方法: $( ".selector" ).autocomplete( "disable" ); |
enable() | jQuery (plugin only) | 啟用 autocomplete。
代碼實例: 調(diào)用 enable 方法: $( ".selector" ).autocomplete( "enable" ); |
option( optionName ) | Object | 獲取當前與指定的 optionName 關聯(lián)的值。
代碼實例: 調(diào)用該方法: var isDisabled = $( ".selector" ).autocomplete( "option", "disabled" ); |
option() | PlainObject | 獲取一個包含鍵/值對的對象,鍵/值對表示當前 autocomplete 選項哈希。
代碼實例: 調(diào)用該方法: var options = $( ".selector" ).autocomplete( "option" ); |
option( optionName, value ) | jQuery (plugin only) | 設置與指定的 optionName 關聯(lián)的 autocomplete 選項的值。
代碼實例: 調(diào)用該方法: $( ".selector" ).autocomplete( "option", "disabled", true ); |
option( options ) | jQuery (plugin only) | 為 autocomplete 設置一個或多個選項。
代碼實例: 調(diào)用該方法: $( ".selector" ).autocomplete( "option", { disabled: true } ); |
search( [value ] ) | jQuery (plugin only) | 觸發(fā) search 事件,如果該事件未被取消則調(diào)用數(shù)據(jù)源。當被點擊時,可被類似選擇框按鈕用來打開建議。當不帶參數(shù)調(diào)用該方法時,則使用當前輸入的值??蓭б粋€空字符串和 minLength: 0 進行調(diào)用,來顯示所有的條目。
代碼實例: 調(diào)用 search 方法: $( ".selector" ).autocomplete( "search", "" ); |
widget() | jQuery | 返回一個包含菜單元素的 jQuery 對象。雖然菜單項不斷地被創(chuàng)建和銷毀。菜單元素本身會在初始化時創(chuàng)建,并不斷的重復使用。
代碼實例: 調(diào)用 widget 方法: $( ".selector" ).autocomplete( "widget" ); |
擴展點 | 返回 | 描述 |
---|---|---|
自動完成部件(Autocomplete Widget)通過 部件庫(Widget Factory) 創(chuàng)建的,且可被擴展。當對部件進行擴展時,您可以重載或者添加擴展部件的行為。下面提供的方法作為擴展點,與上面列出的 插件方法 具有相同的 API 穩(wěn)定性。如需了解更多有關小部件擴展的知識,請查看 通過部件庫(Widget Factory)擴展小部件. | ||
_renderItem( ul, item ) | jQuery | Method that controls the creation of each option in the widget's menu. The method must create a new <li> element, append it to the menu, and return it.Note: At this time the
代碼實例: 添加條目的值作為 _renderItem: function( ul, item ) { return $( "<li>" ) .attr( "data-value", item.value ) .append( $( "<a>" ).text( item.label ) ) .appendTo( ul ); } |
_renderMenu( ul, items ) | jQuery (plugin only) | 該方法負責在菜單顯示前調(diào)整菜單尺寸。菜單元素可通過 this.menu.element 使用。
代碼實例: 添加一個 CSS class 名稱到舊的菜單項。 _renderMenu: function( ul, items ) { var that = this; $.each( items, function( index, item ) { that._renderItemData( ul, item ); }); $( ul ).find( "li:odd" ).addClass( "odd" ); } |
_resizeMenu() | jQuery (plugin only) | 該方法負責在菜單顯示前調(diào)整菜單尺寸。菜單元素可通過 this.menu.element 使用。
代碼實例: 菜單總是顯示為 500 像素寬。 _resizeMenu: function() { this.menu.element.outerWidth( 500 ); } |
事件 | 類型 | 描述 |
---|---|---|
change( event, ui ) | autocompletechange | 如果輸入域的值改變則觸發(fā)該事件。
代碼實例: 初始化帶有指定 change 回調(diào)的 autocomplete: $( ".selector" ).autocomplete({ change: function( event, ui ) {} }); 綁定一個事件監(jiān)聽器到 autocompletechange 事件: $( ".selector" ).on( "autocompletechange", function( event, ui ) {} ); |
close( event, ui ) | autocompleteclose | 當菜單隱藏時觸發(fā)。不是每一個 close 事件都伴隨著 change 事件。
注意: 代碼實例: 初始化帶有指定 close 回調(diào)的 autocomplete: $( ".selector" ).autocomplete({ close: function( event, ui ) {} }); 綁定一個事件監(jiān)聽器到 autocompleteclose 事件: $( ".selector" ).on( "autocompleteclose", function( event, ui ) {} ); |
create( event, ui ) | autocompletecreate | 當創(chuàng)建 autocomplete 時觸發(fā)。
注意: 代碼實例: 初始化帶有指定 create 回調(diào)的 autocomplete: $( ".selector" ).autocomplete({ create: function( event, ui ) {} }); 綁定一個事件監(jiān)聽器到 autocompletecreate 事件: $( ".selector" ).on( "autocompletecreate", function( event, ui ) {} ); |
focus( event, ui ) | autocompletefocus | 當焦點移動到一個條目上(未選擇)時觸發(fā)。默認的動作是把文本域中的值替換為獲得焦點的條目的值,即使該事件是通過鍵盤交互觸發(fā)的。取消該事件會阻止值被更新,但不會阻止菜單項獲得焦點。
代碼實例: 初始化帶有指定 focus 回調(diào)的 autocomplete: $( ".selector" ).autocomplete({ focus: function( event, ui ) {} }); 綁定一個事件監(jiān)聽器到 autocompletefocus 事件: $( ".selector" ).on( "autocompletefocus", function( event, ui ) {} ); |
open( event, ui ) | autocompleteopen | 當打開建議菜單或者更新建議菜單時觸發(fā)。
注意: 代碼實例: 初始化帶有指定 open 回調(diào)的 autocomplete: $( ".selector" ).autocomplete({ open: function( event, ui ) {} }); 綁定一個事件監(jiān)聽器到 autocompleteopen 事件: $( ".selector" ).on( "autocompleteopen", function( event, ui ) {} ); |
response( event, ui ) | autocompleteresponse | 在搜索完成后菜單顯示前觸發(fā)。用于建議數(shù)據(jù)的本地操作,其中自定義的 source 選項回調(diào)不是必需的。該事件總是在搜索完成時觸發(fā),如果搜索無結果或者禁用了 Autocomplete,導致菜單未顯示,該事件一樣會被觸發(fā)。
代碼實例: 初始化帶有指定 response 回調(diào)的 autocomplete: $( ".selector" ).autocomplete({ response: function( event, ui ) {} }); 綁定一個事件監(jiān)聽器到 autocompleteresponse 事件: $( ".selector" ).on( "autocompleteresponse", function( event, ui ) {} ); |
search( event, ui ) | autocompletesearch | 在搜索執(zhí)行前滿足 minLength 和 delay 后觸發(fā)。如果取消該事件,則不會提交請求,也不會提供建議條目。
注意: 代碼實例: 初始化帶有指定 search 回調(diào)的 autocomplete: $( ".selector" ).autocomplete({ search: function( event, ui ) {} }); 綁定一個事件監(jiān)聽器到 autocompletesearch 事件: $( ".selector" ).on( "autocompletesearch", function( event, ui ) {} ); |
select( event, ui ) | autocompleteselect | 當從菜單中選擇條目時觸發(fā)。默認的動作是把文本域中的值替換為被選中的條目的值。取消該事件會阻止值被更新,但不會阻止菜單關閉。
代碼實例: 初始化帶有指定 select 回調(diào)的 autocomplete: $( ".selector" ).autocomplete({ select: function( event, ui ) {} }); 綁定一個事件監(jiān)聽器到 autocompleteselect 事件: $( ".selector" ).on( "autocompleteselect", function( event, ui ) {} ); |
實例
實例 1:一個簡單的 jQuery UI 自動完成(Autocomplete)。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>自動完成部件(Autocomplete Widget)演示</title> <link rel="stylesheet" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" > <script src="http://code.jquery.com/jquery-1.10.2.js" rel="external nofollow" rel="external nofollow" ></script> <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js" rel="external nofollow" rel="external nofollow" ></script> </head> <body> <label for="autocomplete">選擇一個編程語言:</label> <input id="autocomplete"> <script> $( "#autocomplete" ).autocomplete({ source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] }); </script> </body> </html>實例 2:
使用自定義源回調(diào)來匹配條件的開始。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>自動完成部件(Autocomplete Widget)演示</title> <link rel="stylesheet" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" > <script src="http://code.jquery.com/jquery-1.10.2.js" rel="external nofollow" rel="external nofollow" ></script> <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js" rel="external nofollow" rel="external nofollow" ></script> </head> <body> <label for="autocomplete">選擇一個編程語言:</label> <input id="autocomplete"> <script> var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ]; $( "#autocomplete" ).autocomplete({ source: function( request, response ) { var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" ); response( $.grep( tags, function( item ){ return matcher.test( item ); }) ); } }); </script> </body> </html>
更多建議: