Autocomplete Widgetversion added: 1.8
Description: 自动完成功能根据用户输入值进行搜索和过滤,让用户快速找到并从预设值列表中选择。
任何可以接收输入的字段都可以转换为 Autocomplete,即,<input>
元素,<textarea>
元素及带有 contenteditable
属性的元素。
通过给 Autocomplete 字段焦点或者在其中输入字符,插件开始搜索匹配的条目并显示供选择的值的列表。通过输入更多的字符,用户可以过滤列表以获得更好的匹配。
该部件可用于选择先前选定的值,比如输入文章标签或者输入从地址簿中输入地址邮件地址。Autocomplete 也可以用来填充相关的信息,比如输入一个城市的名称来获得该城市的邮政编码。
您可以从本地源或者远程源获取数据:本地源适用于小数据集,例如,带有 50 个条目的地址簿;远程源适用于大数据集,比如,带有数百个或者成千上万个条目的数据库。如需了解更多有关自定义数据源的信息,请查看 source
选项的文档。
键盘交互(Keyboard interaction)
当菜单打开时,下面的键盘命令可用:
- UP - 移动焦点到上一个项目。如果在第一个项目上,则移动焦点到输入(input)。如果在输入(input)上,则移动焦点到最后一个项目。
- DOWN - 移动焦点到下一个项目。如果在最后一个项目上,则移动焦点到输入(input)。如果在输入(input)上,则移动焦点到第一个项目。
- ESCAPE - 关闭菜单。
- ENTER - 选择当前获得焦点的项目,并关闭菜单。
- TAB - 选择当前获得焦点的项目,关闭菜单,并移动焦点到下一个可聚焦(focusable)的元素。
- PAGE UP/DOWN - 滚动一屏的项目(基于菜单的高度)。
当菜单关闭时,下面的键盘命令可用:
- UP/DOWN - 如果满足
minLength
,则打开菜单。
主题(Theming)
自动完成部件(Autocomplete Widget)使用 jQuery UI CSS 框架 来定义它的外观和感观的样式。如果需要使用自动完成部件指定的样式,则可以使用下面的 CSS class 名称:
ui-autocomplete
:用于显示匹配用户的 菜单(menu)ui-autocomplete-input
:自动完成部件(Autocomplete Widget)实例化的 input 元素。
依赖(Dependencies)
其他注意事项:
- 该部件要求一些功能性的 CSS,否则将无法工作。如果您创建了一个自定义的主题,请使用小部件指定的 CSS 文件作为起点。
- 该部件以编程方式操作元素的值,因此当元素的值改变时不会触发原生的
change
事件。
选项
appendToType: Selector
null
菜单应该被附加到哪一个元素。当该值为 null
时,输入域的父元素将检查 ui-front
class。如果找到带有 ui-front
class
的元素,菜单将被附加到该元素。如果未找到带有 ui-front
class 的元素,不管值为多少,菜单将被附加到 body。
appendTo
选项不应改变。初始化带有指定 appendTo
选项的 autocomplete:
1
|
|
在初始化后,获取或设置 appendTo
选项:
1
2
3
4
5
|
|
autoFocusType: Boolean
false
true
,当菜单显示时,第一个条目将自动获得焦点。初始化带有指定 autoFocus
选项的 autocomplete:
1
|
|
在初始化后,获取或设置 autoFocus
选项:
1
2
3
4
5
|
|
delayType: Integer
300
初始化带有指定 delay
选项的 autocomplete:
1
|
|
在初始化后,获取或设置 delay
选项:
1
2
3
4
5
|
|
disabledType: Boolean
false
true
,则禁用该 autocomplete。初始化带有指定 disabled
选项的 autocomplete:
1
|
|
在初始化后,获取或设置 disabled
选项:
1
2
3
4
5
|
|
minLengthType: Integer
1
初始化带有指定 minLength
选项的 autocomplete:
1
|
|
在初始化后,获取或设置 minLength
选项:
1
2
3
4
5
|
|
positionType: Object
{ my: "left top", at: "left bottom", collision: "none" }
of
选项默认为 input 元素,但是您可以指定另一个定位元素。如需了解各种选项的更多细节,请查看 jQuery UI Position。初始化带有指定 position
选项的 autocomplete:
1
|
|
在初始化后,获取或设置 position
选项:
1
2
3
4
5
|
|
sourceType: Array or String or Function( Object request, Function response( Object data ) )
none
; 必须指定
独立于您要使用的变量,标签总是被视为文本。如果您想要标签被视为 html,您可以使用 Scott González' html 扩展 。演示侧重于 source
选项的不同变量 - 您可以查找其中匹配您的使用情况的那个,并查看相关代码。
- Array:可用于本地数据的一个数组。支持两种格式:
- 字符串数组:
[ "Choice1", "Choice2" ]
- 带有
label
和value
属性的对象数组:[ { label: "Choice1", value: "value1" }, ... ]
value
属性,value 也会被视为标签。 - 字符串数组:
- String:当使用一个字符串,Autocomplete 插件希望该字符串指向一个能返回 JSON 数据的 URL 资源。它可以是在相同的主机上,也可以是在不同的主机上(必须提供
JSONP)。Autocomplete 插件不过滤结果,而是通过一个
term
字段添加了一个查询字符串,用于服务器端脚本过滤结果。例如,如果source
选项设置为"http://example.com"
,且用户键入了foo
,GET 请求则为http://example.com?term=foo
。数据本身的格式可以与前面描述的本地数据的格式相同。 - Function:第三个变量,一个回调函数,提供最大的灵活性,可用于连接任何数据源到 Autocomplete。回调函数接受两个参数:
- 一个
request
对象,带有一个term
属性,表示当前文本输入中的值。例如,如果用户在 city 字段输入"new yo"
,则 Autocomplete term 等同于"new yo"
。 - 一个
response
回调函数,提供单个参数:建议给用户的数据。该数据应基于被提供的 term 进行过滤,且可以是上面描述的本地数据的任何格式。用于在请求期间提供自定义 source 回调来处理错误。即使遇到错误,您也必须调用response
回调函数。这就确保了小部件总是正确的状态。
当过滤本地数据时,您可以使用内置的
$.ui.autocomplete.escapeRegex
函数。它会接受一个字符串参数,转义所有的正则表达式字符,让结果安全地传递到new RegExp()
。 - 一个
初始化带有指定 source
选项的 autocomplete:
1
|
|
在初始化后,获取或设置 source
选项:
1
2
3
4
5
|
|
Methods
close()Returns: jQuery (plugin only)
search
方法结合使用时,可用于关闭打开的菜单。- 该方法不接受任何参数。
调用 close 方法:
1
|
|
destroy()Returns: jQuery (plugin only)
- 该方法不接受任何参数。
调用 destroy 方法:
1
|
|
disable()Returns: jQuery (plugin only)
- 该方法不接受任何参数。
调用 disable 方法:
1
|
|
enable()Returns: jQuery (plugin only)
- 该方法不接受任何参数。
调用 enable 方法:
1
|
|
option( optionName )Returns: Object
optionName
关联的值。-
optionNameType: String要获取值的选项的名称。
调用该方法:
1
|
|
option()Returns: PlainObject
- 该方法不接受任何参数。
调用该方法:
1
|
|
option( optionName, value )Returns: jQuery (plugin only)
optionName
关联的 autocomplete 选项的值。调用该方法:
1
|
|
option( options )Returns: jQuery (plugin only)
-
optionsType: Object要设置的 option-value 对。
调用该方法:
1
|
|
search( [value ] )Returns: jQuery (plugin only)
search
事件,如果该事件未被取消则调用数据源。当被点击时,可被类似选择框按钮用来打开建议。当不带参数调用该方法时,则使用当前输入的值。可带一个空字符串和 minLength: 0
进行调用,来显示所有的条目。
-
valueType: String
调用 search 方法:
1
|
|
widget()Returns: jQuery
jQuery
对象。虽然菜单项不断地被创建和销毁。菜单元素本身会在初始化时创建,并不断的重复使用。- 该方法不接受任何参数。
调用 widget 方法:
1
|
|
Extension Points
自动完成部件(Autocomplete Widget)通过 部件库(Widget Factory) 创建的,且可被扩展。当对部件进行扩展时,您可以重载或者添加扩展部件的行为。下面提供的方法作为扩展点,与上面列出的 插件方法 具有相同的 API 稳定性。如需了解更多有关小部件扩展的知识,请查看 通过部件库(Widget Factory)扩展小部件。
_renderItem( ul, item )Returns: jQuery
控制在部件菜单中每个选项的创建的格式化方法
该方法必须创建一个新的<li>
元素,追加到菜单中,并返回它。
注意: 为了与menu小部件兼容,这时创建的<ul>
元素必须包含一个<a>
元素。
请看下面的例子。
添加条目的值作为 <li>
上的 data 属性。
1
2
3
4
5
6
|
|
_renderMenu( ul, items )Returns: jQuery (plugin only)
<ul>
和匹配用户输入的术语的项目数组。 创建当个的<li>
元素应该委派给_renderItemData()
。
-
ulType: jQuery一个要作为小部件的菜单使用的空的
<ul>
元素。 -
itemsType: Array一个数组,数组元素为匹配用户输入的条目。每个条目是一个带有
label
和value
属性的对象。
添加一个 CSS class 名称到旧的菜单项。
1
2
3
4
5
6
7
|
|
_resizeMenu()Returns: jQuery (plugin only)
this.menu.element
使用。- 该方法不接受任何参数。
菜单总是显示为 500 像素宽。
1
2
3
|
|
Events
change( event, ui )Type: autocompletechange
初始化带有指定 change 回调的 autocomplete:
1
2
3
|
|
绑定一个事件监听器到 autocompletechange 事件:
1
|
|
close( event, ui )Type: autocompleteclose
close
事件都伴随着 change
事件。注意:ui
对象是空的,这里包含它是为了与其他事件保持一致性。
初始化带有指定 close 回调的 autocomplete:
1
2
3
|
|
绑定一个事件监听器到 autocompleteclose 事件:
1
|
|
create( event, ui )Type: autocompletecreate
注意:ui
对象是空的,这里包含它是为了与其他事件保持一致性。
初始化带有指定 create 回调的 autocomplete:
1
2
3
|
|
绑定一个事件监听器到 autocompletecreate 事件:
1
|
|
focus( event, ui )Type: autocompletefocus
取消该事件会阻止值被更新,但不会阻止菜单项获得焦点。
初始化带有指定 focus 回调的 autocomplete:
1
2
3
|
|
绑定一个事件监听器到 autocompletefocus 事件:
1
|
|
open( event, ui )Type: autocompleteopen
注意:ui
对象是空的,这里包含它是为了与其他事件保持一致性。
初始化带有指定 open 回调的 autocomplete:
1
2
3
|
|
绑定一个事件监听器到 autocompleteopen 事件:
1
|
|
response( event, ui )Type: autocompleteresponse
source
选项回调不是必需的。该事件总是在搜索完成时触发,如果搜索无结果或者禁用了 Autocomplete,导致菜单未显示,该事件一样会被触发。-
eventType: Event
-
uiType: Object
-
contentType: Array包含响应数据,且可被修改来改变显示结果。该数据已经标准化,所以如果您要修改数据,请确保每个条目都包含
value
和label
属性。
-
初始化带有指定 response 回调的 autocomplete:
1
2
3
|
|
绑定一个事件监听器到 autocompleteresponse 事件:
1
|
|
search( event, ui )Type: autocompletesearch
注意:ui
对象是空的,这里包含它是为了与其他事件保持一致性。
初始化带有指定 search 回调的 autocomplete:
1
2
3
|
|
绑定一个事件监听器到 autocompletesearch 事件:
1
|
|
select( event, ui )Type: autocompleteselect
取消该事件会阻止值被更新,但不会阻止菜单关闭。
-
eventType: Event
-
uiType: Object
-
itemType: ObjectAn Object with
label
andvalue
properties for the selected option.
-
初始化带有指定 select 回调的 autocomplete:
1
2
3
|
|
绑定一个事件监听器到 autocompleteselect 事件:
1
|
|
Examples:
Example: 一个简单的 jQuery UI 自动完成(Autocomplete)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
|
Demo:
Example: Using a custom source callback to match only the beginning of terms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
|