autocomplete.js:自动完成功能的JavaScript库
autocomplete.js
是一个用于实现输入框自动完成功能的JavaScript库,它通过监听用户的输入事件,动态地显示一个下拉菜单,其中包含与用户输入匹配的选项,这个库广泛应用于各种表单输入场景,如搜索框、地址输入、标签选择等,以提高用户体验和输入效率。
主要功能
1、自动完成:根据用户输入实时显示匹配的选项。
2、自定义数据源:支持从数组、函数或API获取数据源。
3、自定义渲染:允许自定义每个选项的HTML结构。
4、过滤和排序:支持对数据进行过滤和排序。
5、键盘导航:支持使用键盘上下键导航选项,回车键选择选项。
6、多语言支持:内置多种语言支持,方便国际化。
7、可扩展性:可以通过插件机制扩展功能。
安装与引入
通过CDN引入
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/autocomplete.js@latest/dist/css/autocomplete.min.css"> <script src="https://cdn.jsdelivr.net/npm/autocomplete.js@latest/dist/js/autocomplete.min.js"></script>
通过npm安装
npm install autocomplete.js
在项目中引入:
import 'autocomplete.js/dist/css/autocomplete.min.css'; import Autocomplete from 'autocomplete.js';
基本用法
HTML部分
<input id="my-input" type="text" placeholder="Type something...">
JavaScript部分
const data = ['apple', 'banana', 'grape', 'orange', 'peach']; new Autocomplete({ selector: '#my-input', minChars: 1, source: function(term, suggest){ const termLower = term.toLowerCase(); const filtered = data.filter(function(item){ return item.toLowerCase().indexOf(termLower) > -1; }); suggest(filtered); }, onSelect: function(event, suggestion){ alert('You selected: ' + suggestion.value); } });
配置项详解
参数名 | 类型 | 默认值 | 描述 |
selector |
string | '' | 目标输入框的选择器。 |
minChars |
number | 1 | 触发自动完成的最小字符数。 |
source |
function | null | 数据源函数,返回建议列表。 |
onSelect |
function | null | 选中某项时的回调函数。 |
onFocus |
function | null | 输入框获得焦点时的回调函数。 |
onBlur |
function | null | 输入框失去焦点时的回调函数。 |
onSuggestionsFetched |
function | null | 建议列表获取完成后的回调函数。 |
onSuggestionsCleared |
function | null | 建议列表清空后的回调函数。 |
onSuggestionsRequestStart |
function | null | 请求建议列表前的回调函数。 |
onSuggestionsRequestEnd |
function | null | 请求建议列表后的回调函数。 |
limit |
number | 10 | 最大显示的建议数量。 |
delay |
number | 300 | 请求延迟时间(毫秒)。 |
renderItem |
function | null | 自定义渲染每个选项的函数。 |
highlightClass |
string | 'autocomplete-highlight' | 高亮选中项的CSS类名。 |
classes |
object | {} | 自定义CSS类名。 |
appendTo |
string | document.body | 将下拉菜单附加到哪个元素。 |
position |
object | {collision: 'flip'} | 下拉菜单位置和碰撞处理。 |
scrollHeight |
boolean | true | 是否启用滚动高度限制。 |
scrollIntoView |
boolean | true | 是否滚动视图以使选定项可见。 |
focusIndexOnDownArrow |
boolean | true | 按下箭头时是否聚焦第一个选项。 |
focusIndexOnUpArrow |
boolean | false | 按上箭头时是否聚焦最后一个选项。 |
hint |
boolean | false | 是否启用提示模式。 |
hintDelay |
number | 300 | 提示模式的延迟时间(毫秒)。 |
hintPositionFixed |
boolean | false | 提示位置是否固定。 |
debounce |
number | 0 | 防抖时间(毫秒)。 |
triggerSelectOnValidInput |
boolean | false | 有效输入时是否触发选择。 |
triggerSelectOnBlur |
boolean | true | 失去焦点时是否触发选择。 |
triggerSelectOnEnter |
boolean | true | 按下回车键时是否触发选择。 |
triggerSelectOnTab |
boolean | true | 按下Tab键时是否触发选择。 |
triggerSelectOnNavigation |
boolean | true | 使用方向键导航时是否触发选择。 |
高级用法
自定义数据源
可以通过异步请求获取数据源:
new Autocomplete({ selector: '#my-input', minChars: 1, source: function(term, suggest){ // 模拟异步请求 setTimeout(function(){ const termLower = term.toLowerCase(); const filtered = data.filter(function(item){ return item.toLowerCase().indexOf(termLower) > -1; }); suggest(filtered); }, 500); }, onSelect: function(event, suggestion){ alert('You selected: ' + suggestion.value); } });
自定义渲染
可以自定义每个选项的HTML结构:
new Autocomplete({
selector: '#my-input',
minChars: 1,
source: function(term, suggest){
const termLower = term.toLowerCase();
const filtered = data.filter(function(item){
return item.toLowerCase().indexOf(termLower) > -1;
});
suggest(filtered);
},
renderItem: function(item, escapeValue){
return<div><strong>${escapeValue(item)}</strong></div>
;
},
onSelect: function(event, suggestion){
alert('You selected: ' + suggestion.value);
}
});
多语言支持
内置多种语言支持,可以通过设置locale
选项来切换语言:
new Autocomplete({ selector: '#my-input', minChars: 1, source: function(term, suggest){ const termLower = term.toLowerCase(); const filtered = data.filter(function(item){ return item.toLowerCase().indexOf(termLower) > -1; }); suggest(filtered); }, onSelect: function(event, suggestion){ alert('You selected: ' + suggestion.value); }, locale: { hint: "Suggerimenti", // Placeholder for suggestions box selectAllText: "Seleziona tutto", // Text for select all button in multiple select box selectGroupText: "Tutti selezionati", // Text for select group button in multiple select box loadingText: "Caricamento...", // Text for loading state noResultsText: "Nessun risultato corrispondente {query}", // Text when no results match the input query noneResultsText: "Nessun risultati trovati {query}", // Text when no results found for the input query (when there are previous results) highlightNoneResultsText: "Nessun risultati trovati per <em>{query}</em>", // Text when no results found for the input query (when there are previous results and need to highlight) searchHint: "Cerca {query}", // Text for search input placeholder categoryAllText: "Tutto", // Text for "all categories" option in category selection box categoryFilterPlaceholder: "Filtra categorie...", // Placeholder text for category filter input box notACategoryText: "non è una categoria", // Text for non-category items in category selection box groupByText: "gruppi per {option}", // Text for group by options in multiple select box or combobox groupNoneOptionText: "non raggruppare", // Text for non grouping option in multiple select box or combobox groupSelectedText: "{optionCount} di {optionTotal} selezionati", // Text for grouped options in multiple select box or combobox (selected count) groupDisabledText: "{optionCount} di {optionTotal} disponibili", // Text for grouped options in multiple select box or combobox (disabled count) suggestMinCharsText: "Almeno {minChars} caratteri", // Text for minimum characters required in suggestions box or combobox (minChars value) loadingImageUrl: "/path/to/loading-image.gif", // URL of loading image for suggestions box or combobox (use with .showLoading method) showAllText: "Mostra tutti", // Text for show all button in suggestions box or combobox (use with .showAll method) hideAllText: "Nascondi tutti", // Text for hide all button in suggestions box or combobox (use with .hideAll method) showMoreText: "Più risultati", // Text for show more button in suggestions box or combobox (use with .showMore method) hideMoreText: "Meno risultati", // Text for hide more button in suggestions box or combobox (use with .hideMore method) onlyMatchText: "Solo risultati contenenti la ricerca", // Text for only matching results button in suggestions box or combobox (use with .onlyMatch method) onlyMatchPlaceholder: "Risultati contenenti la ricerca", // Placeholder text for only matching results input box in suggestions box or combobox (use with .onlyMatch method) clearSelectionButtonLabel: "Cancella scelta", // Text for clear selection button in suggestions box or combobox (use with .clearSelection method) clearSelectionPlaceholder: "Seleziona un'opzione per cancellare", // Placeholder text for clear selection input box in suggestions box or combobox (use with .clearSelection method) selectDeselectAllText: "Seleziona/Deseleziona tutto", // Text for select/deselect all button in suggestions box or combobox (use with .selectAll or .deselectAll methods) selectDeselectGroupText: "Seleziona/Deseleziona gruppo", // Text for select/deselect group button in suggestions box or combobox (use with .selectGroup or .deselectGroup methods) expandCollapseAllText: "Espandi/Comprimi tutto", // Text for expand/collapse all button in suggestions box or combobox (use with .expandAll or .collapseAll methods) expandCollapseGroupText: "Espandi/Comprimi gruppo", // Text for expand/collapse group button in suggestions box or combobox (use with .expandGroup or .collapseGroup methods) removeItemsText: "Rimuovi elementi", // Text for remove items button in suggestions box or combobox (use with .removeItems method) collapsePreviousText: "Collassabile precedente" // Text for collapse previous button in suggestions box or combobox (use with .collapsePrevious method) }, onSelect: function(event, suggestion){ alert('You selected: ' + suggestion.value); } });
API文档
以下是autocomplete.js
库的主要API文档:
new Autocomplete(options)
创建一个新的自动完成实例,参数如下:
selector
:字符串,目标输入框的选择器。
minChars
:整数,触发自动完成的最小字符数,默认为1。
source
:函数,数据源函数,接收两个参数:查询字符串和回调函数,返回建议列表。
onSelect
:函数,当选择某个建议时触发的回调函数,接收两个参数:事件对象和建议对象。
其他配置项:详见上述配置项说明。
instance.destroy()
销毁自动完成实例,释放资源。
const autocomplete = new Autocomplete('#my-input'); autocomplete.destroy();
instance.setOptions(options)
更新自动完成实例的配置项,参数为一个对象,包含需要更新的配置项。
const autocomplete = new Autocomplete('#my-input'); autocomplete.setOptions({ minChars: 2 });
instance.getOptions()
获取当前自动完成实例的所有配置项,返回一个对象。
const autocomplete = new Autocomplete('#my-input'); const options = autocomplete.getOptions(); console.log(options);
instance.enable()
启用自动完成功能。
const autocomplete = new Autocomplete('#my-input'); autocomplete.enable();
instance.disable()
禁用自动完成功能。
const autocomplete = new Autocomplete('#my-input'); autocomplete.disable();
instance.show()
显示建议列表,通常在输入框获得焦点时调用。
const autocomplete = new Autocomplete('#my-input'); autocomplete.show();
instance.hide()
隐藏建议列表,通常在输入框失去焦点时调用。
const autocomplete = new Autocomplete('#my-input'); autocomplete.hide();
instance.clearSuggestions()
清除当前的建议列表,通常在用户输入新的内容时调用。
const autocomplete = new Autocomplete('#my-input'); autocomplete.clearSuggestions();
instance.setSource(sourceFunction)
更新数据源函数,参数为一个新的数据源函数。
const autocomplete = new Autocomplete('#my-input'); autocomplete.setSource(function(term, suggest){ const termLower = term.toLowerCase(); const filtered = data.filter(function(item){ return item.toLowerCase().indexOf(termLower) > -1; }); suggest(filtered); });
instance.setRenderItem(renderFunction)
更新每个选项的HTML结构函数,参数为一个新的渲染函数。
const autocomplete = new Autocomplete('#my-input');
autocomplete.setRenderItem(function(item, escapeValue){
return<div><strong>${escapeValue(item)}</strong></div>
;
});
instance.setLocale(localeObject)
更新语言配置项,参数为一个新的语言对象,示例如下:
const autocomplete = new Autocomplete('#my-input'); autocomplete.setLocale({ hint: "Suggerimenti" }); // 仅更新hint文本,其余保持默认值
相关问题与解答栏目:以下问题与本文内容相关,请认真回答。
各位小伙伴们,我刚刚为大家分享了有关“autocomplete.js”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/647012.html