自动完成小组件添加版本:1.8
描述:自动完成让用户在输入时快速查找和从预先填充的值列表中进行选择,利用搜索和筛选功能。
任何可以接收输入的字段都可以转换为自动完成,即 <input>
元素、<textarea>
元素和具有 contenteditable
属性的元素。
在自动完成字段中输入时,插件会开始搜索匹配的条目,并显示一个可供选择的列表。通过输入更多字符,用户可以将列表筛选到更好的匹配项。
这可用于选择先前选定的值,例如输入文章的标签或从地址簿中输入电子邮件地址。自动完成还可用于填充相关信息,例如输入城市名称并获取邮政编码。
您可以从本地或远程来源获取数据:本地适用于小型数据集,例如包含 50 个条目的地址簿;远程对于大型数据集是必需的,例如包含数百或数百万条目的数据库以供选择。要了解有关自定义数据源的更多信息,请参阅 source
选项的文档。
键盘交互
当菜单打开时,以下按键命令可用
-
向上
:将焦点移至上一项。如果在第一项,则将焦点移至输入框。如果在输入框,则将焦点移至最后一项。 -
向下
:将焦点移至下一项。如果在最后一项,则将焦点移至输入框。如果在输入框,则将焦点移至第一项。 -
ESC
:关闭菜单。 -
ENTER
:选择当前聚焦项并关闭菜单。 -
TAB
:选择当前聚焦项,关闭菜单,并将焦点移至下一个可聚焦元素。 -
PAGE UP
/PAGE DOWN
:滚动浏览一页项(基于菜单的高度)。通常来说,显示太多用户需要分页的项是个坏主意。
当菜单关闭时,以下按键命令可用
-
向上
/向下
:如果已满足minLength
,则打开菜单。
主题
自动完成小组件使用 jQuery UI CSS 框架 来设置其外观和感觉。如果需要自动完成特定样式,可以使用以下 CSS 类名称进行覆盖或作为 classes
选项 的键
-
ui-autocomplete
:用于向用户显示匹配项的 菜单。 -
ui-autocomplete-input
:自动完成小组件实例化的输入元素。在请求向用户显示数据时,ui-autocomplete-loading
类也会添加到此元素。
依赖项
其他说明
- 此小组件需要一些功能性 CSS,否则将无法工作。如果你构建自定义主题,请使用小组件的特定 CSS 文件作为起点。
-
此小组件以编程方式操作其元素的值,因此在元素的值更改时可能不会触发本机
change
事件。
选项
appendTo
null
菜单应附加到哪个元素。当值为 null
时,将检查输入字段的父级是否存在 ui-front
类。如果找到具有 ui-front
类的元素,则菜单将附加到该元素。无论值是什么,如果未找到元素,则菜单将附加到正文。
appendTo
选项不应更改。使用指定的 appendTo
选项初始化自动完成
1
2
3
|
|
在初始化后获取或设置 appendTo
选项
1
2
3
4
5
|
|
autoFocus
false
true
,当菜单显示时,将自动聚焦第一个项目。使用指定的 autoFocus
选项初始化自动完成
1
2
3
|
|
在初始化后获取或设置 autoFocus
选项
1
2
3
4
5
|
|
classes
{}
指定要添加到小部件元素的其他类。在 主题部分 中指定的任何类都可以用作键来覆盖其值。要了解有关此选项的更多信息,请查看 有关 classes
选项的学习文章。
使用指定的 classes
选项初始化自动完成,更改 ui-autocomplete
类的主题
1
2
3
4
5
|
|
在初始化后获取或设置 classes
选项的属性,此处读取和更改 ui-autocomplete
类的主题
1
2
3
4
5
|
|
delay
300
使用指定的 delay
选项初始化自动完成
1
2
3
|
|
在初始化后获取或设置 delay
选项
1
2
3
4
5
|
|
disabled
false
true
,则禁用自动完成。使用指定的 disabled
选项初始化自动完成
1
2
3
|
|
在初始化后获取或设置 disabled
选项
1
2
3
4
5
|
|
minLength
1
使用指定的 minLength
选项初始化自动完成
1
2
3
|
|
初始化后获取或设置 minLength
选项
1
2
3
4
5
|
|
位置
{ my: "left top", at: "left bottom", collision: "none" }
of
选项默认为输入元素,但是你可以指定另一个元素来相对定位。你可以参考 jQuery UI 位置 实用程序,以了解有关各种选项的更多详细信息。使用指定的 position
选项初始化自动完成
1
2
3
|
|
初始化后获取或设置 position
选项
1
2
3
4
5
|
|
来源
none;必须指定
独立于你使用的变体,标签始终被视为文本。如果你希望标签被视为 html,你可以使用 Scott González 的 html 扩展。所有演示都关注 source
选项的不同变体 - 寻找与你的用例匹配的一个,并查看代码。
-
数组:数组可用于本地数据。支持两种格式
- 字符串数组:
[ "Choice1", "Choice2" ]
- 具有
label
和value
属性的对象数组:[ { label: "Choice1", value: "value1" }, ... ]
value
属性,该值也将用作标签。 - 字符串数组:
-
字符串:当使用字符串时,自动完成插件期望该字符串指向将返回 JSON 数据的 URL 资源。它可以位于同一主机或不同主机上(必须支持 CORS)。自动完成插件不会过滤结果,而是添加一个带有
term
字段的查询字符串,服务器端脚本应使用该字段来过滤结果。例如,如果source
选项设置为"https://example.com"
,并且用户键入foo
,则会向https://example.com?term=foo
发出 GET 请求。数据本身可以采用与上面描述的本地数据相同的格式。 -
函数:第三个变体(回调)提供了最大的灵活性,可用于将任何数据源连接到自动完成,包括 JSONP。回调有两个参数
- 一个
request
对象,它具有一个term
属性,该属性引用文本输入中当前的值。例如,如果用户在城市字段中输入"new yo"
,则自动完成术语将等于"new yo"
。 response
回调,它期望一个参数:要向用户建议的数据。此数据应根据提供的术语进行筛选,并且可以采用上述简单本地数据的任何格式。在请求期间处理错误时,提供自定义源回调非常重要。即使遇到错误,也必须始终调用response
回调。这可确保小组件始终具有正确状态。
在本地筛选数据时,可以使用内置的
$.ui.autocomplete.escapeRegex
函数。它将采用单个字符串参数并转义所有正则表达式字符,从而使结果可以安全地传递给new RegExp()
。 - 一个
使用指定的 source
选项初始化自动完成
1
2
3
|
|
在初始化后获取或设置 source
选项
1
2
3
4
5
|
|
方法
instance()返回:对象
检索自动完成的实例对象。如果元素没有关联的实例,则返回 undefined
。
与其他小组件方法不同,instance()
在加载自动完成插件后可以安全地对任何元素进行调用。
- 此方法不接受任何参数。
调用 instance 方法
1
|
|
option( optionName )返回:对象
获取当前与指定的 optionName
关联的值。
注意:对于以对象作为其值的选择项,你可以使用点表示法来获取特定键的值。例如,"foo.bar"
将获取 foo
选项上 bar
属性的值。
-
optionName类型:字符串要获取的选项的名称。
调用方法
1
|
|
option()返回:PlainObject
- 此签名不接受任何参数。
调用方法
1
|
|
widget()返回:jQuery
jQuery
对象。虽然菜单项不断被创建和销毁,但菜单元素本身在初始化期间被创建并不断被重用。- 此方法不接受任何参数。
调用小组件方法
1
|
|
扩展点
自动完成小组件是使用小组件工厂构建的,并且可以扩展。在扩展小组件时,您可以覆盖或添加到现有方法的行为。以下方法作为扩展点提供,其 API 稳定性与上面列出的插件方法相同。有关小组件扩展的更多信息,请参阅使用小组件工厂扩展小组件。
_renderItem( ul, item )返回:jQuery
控制在小组件菜单中创建每个选项的方法。该方法必须创建一个新的 <li>
元素,将其附加到菜单,然后返回它。有关标记的更多详细信息,请参阅菜单文档。
将该项目的 value 作为数据属性添加到 <li>
上。
1
2
3
4
5
6
|
|
_renderMenu( ul, items )返回:jQuery(仅限插件)
<ul>
和一个与用户键入的术语匹配的项目数组。创建各个 <li>
元素应委托给 _renderItemData()
,而后者又委托给_renderItem()
扩展点。
向奇数菜单项添加 CSS 类名称。
1
2
3
4
5
6
7
|
|
事件
change( event, ui )类型:autocompletechange
使用指定的 change 回调初始化自动完成
1
2
3
|
|
将事件侦听器绑定到 autocompletechange 事件
1
|
|
close(事件, ui)类型: autocompleteclose
close
事件都会伴随一个 change
事件。注意: ui
对象为空,但为了与其他事件保持一致而包含在内。
使用指定的 close 回调初始化自动完成
1
2
3
|
|
将事件侦听器绑定到 autocompleteclose 事件
1
|
|
create(事件, ui)类型: autocompletecreate
注意: ui
对象为空,但为了与其他事件保持一致而包含在内。
使用指定的 create 回调初始化自动完成
1
2
3
|
|
将事件侦听器绑定到 autocompletecreate 事件
1
|
|
focus(事件, ui)类型: autocompletefocus
取消此事件可防止更新值,但不会阻止菜单项获得焦点。
使用指定的 focus 回调初始化自动完成
1
2
3
|
|
将事件侦听器绑定到 autocompletefocus 事件
1
|
|
open(事件, ui)类型: autocompleteopen
注意: ui
对象为空,但为了与其他事件保持一致而包含在内。
使用指定的 open 回调初始化自动完成
1
2
3
|
|
将事件侦听器绑定到 autocompleteopen 事件
1
|
|
response(事件, ui)类型: autocompleteresponse
source
选项回调。即使菜单不会显示(因为没有结果或自动完成被禁用),在搜索完成后也会始终触发此事件。-
event类型:Event
-
ui类型:对象
-
content类型:Array包含响应数据,可以修改以更改将显示的结果。此数据已经过标准化,因此,如果您修改数据,请确保为每个项目都包含
value
和label
属性。
-
使用指定的 response 回调初始化自动完成
1
2
3
|
|
将事件侦听器绑定到 autocompleteresponse 事件
1
|
|
search(事件, ui)类型: autocompletesearch
注意: ui
对象为空,但为了与其他事件保持一致而包含在内。
使用指定的 search 回调初始化自动完成
1
2
3
|
|
将事件侦听器绑定到 autocompletesearch 事件
1
|
|
select(事件, ui)类型: autocompleteselect
取消此事件可防止更新值,但不会阻止菜单关闭。
使用指定的 select 回调初始化自动完成
1
2
3
|
|
将事件监听器绑定到 autocompleteselect 事件
1
|
|
示例
一个简单的 jQuery UI 自动完成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
|
演示
使用自定义源回调来仅匹配术语的开头
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
|
|