Инициализация Awesomplete строится вокруг передачи второго аргумента конструктора — объекта конфигурации. Именно этот объект определяет поведение автодополнения, способ фильтрации, формат элементов списка и реакцию на ввод пользователя.
Основная форма:
new Awesomplete(inputElement, {
list: [],
minChars: 1,
maxItems: 10,
autoFirst: false,
sort: ...,
filter: ...,
item: ...,
replace: ...
});
Каждый параметр влияет на отдельный этап жизненного цикла подсказок: от получения исходных данных до отображения и вставки выбранного значения.
Параметр list определяет набор значений, используемых для генерации подсказок. Поддерживаются несколько форматов.
Базовый вариант:
list: ["Apple", "Apricot", "Avocado"]
Каждая строка рассматривается как отдельный элемент.
Используется при необходимости хранить дополнительные данные:
list: [
{ label: "Apple", value: "apple" },
{ label: "Apricot", value: "apricot" }
]
В этом случае логика отображения и вставки может быть изменена через
item и replace.
Позволяет динамически формировать список:
list: function () {
return ["Alpha", "Beta", "Gamma"];
}
Функция вызывается при каждом обновлении ввода.
Поддерживается возврат Promise:
list: function (input) {
return fetch("/api/suggest?q=" + input)
.then(r => r.json());
}
Такой подход используется при серверной фильтрации и больших наборах данных.
Параметр minChars задаёт порог активации автодополнения.
minChars: 2
Поведение:
list.Используется для снижения нагрузки и уменьшения «шума» в интерфейсе.
maxItems определяет максимальное число подсказок, показываемых в выпадающем списке.
maxItems: 5
Механизм работы:
sort.Параметр autoFirst управляет активным выделением первой подсказки.
autoFirst: true
При включении:
Параметр sort определяет порядок элементов после фильтрации.
Сигнатура:
sort: function (a, b, input) {
return 0;
}
Где:
a, b — элементы списка;input — текущее значение поля ввода.Пример лексикографической сортировки:
sort: function (a, b) {
return a.localeCompare(b);
}
Полное отключение сортировки:
sort: function () {
return 0;
}
filter определяет, какие элементы попадут в список.
Сигнатура:
filter: function (text, input) {
return true;
}
text — значение элемента;input — текущий ввод.Стандартное поведение — поиск подстроки без учёта регистра:
filter: function (text, input) {
return text.toLowerCase().includes(input.toLowerCase());
}
Используется для реализации:
Параметр item отвечает за визуальное представление каждого элемента списка.
Сигнатура:
item: function (text, input) {
return document.createElement("li");
}
Стандартный механизм создаёт элемент <li> с
подсветкой совпадений.
Пример кастомизации:
item: function (text, input) {
const li = document.createElement("li");
li.textContent = text;
li.className = "suggestion-item";
return li;
}
Возможности:
Параметр replace определяет, как выбранный элемент подставляется в input.
Сигнатура:
replace: function (text) {}
Простейший вариант:
replace: function (text) {
this.input.value = text;
}
Расширенные сценарии:
replace: function (item) {
this.input.value = item.label;
this.input.dataset.value = item.value;
}
replace: function (text) {
this.input.value = text + " ";
}
Используется для:
Параметр data отвечает за нормализацию элементов списка перед фильтрацией и отображением.
Сигнатура:
data: function (item, input) {
return item;
}
Пример извлечения поля объекта:
data: function (item) {
return item.label;
}
Используется для:
В ранних версиях использовался параметр max, который ограничивал количество элементов.
max: 10
В современных конфигурациях заменён на maxItems, однако встречается в устаревших кодовых базах.
В некоторых расширенных реализациях присутствует параметр container, определяющий родительский DOM-элемент для списка подсказок.
container: document.querySelector(".autocomplete-container")
Позволяет:
Параметры Awesomplete не работают изолированно. Их взаимодействие формирует полный цикл обработки данных:
Такой конвейер позволяет гибко изменять каждую стадию без модификации ядра библиотеки.