Awesomplete предоставляет набор методов, позволяющих полностью управлять поведением автодополнения без участия пользовательских событий. Программное управление строится вокруг экземпляра компонента, который сохраняется в переменной и используется для вызова внутренних API.
Экземпляр создаётся поверх DOM-элемента текстового поля и хранится в переменной:
const input = document.querySelector("#city");
const awesomplete = new Awesomplete(input, {
minChars: 1,
autoFirst: true
});
После инициализации управление осуществляется через объект
awesomplete. Все методы работают синхронно и изменяют
состояние виджета напрямую, без необходимости взаимодействия с
интерфейсом пользователя.
Ключевой принцип программного управления — разделение состояния ввода и состояния списка подсказок.
Управление видимостью выпадающего списка реализуется через методы
open() и close().
awesomplete.open();
awesomplete.close();
Метод open():
list)При отсутствии подходящих данных список может оставаться пустым, но DOM-структура всё равно создаётся.
Метод close():
Закрытие не очищает данные и не сбрасывает фильтры.
Навигационные методы управляют активной строкой подсказок.
awesomplete.next();
Перемещает активный выбор вниз по списку. При достижении конца списка поведение зависит от настроек и может зацикливаться.
awesomplete.previous();
Перемещает активный выбор вверх по списку.
Оба метода изменяют внутренний индекс selectedIndex,
который определяет текущий выделенный элемент.
awesomplete.goto(2);
Устанавливает активный элемент по конкретному индексу.
Особенности:
Метод select() имитирует выбор текущего активного
элемента:
awesomplete.select();
При вызове:
Этот метод эквивалентен нажатию Enter по активной строке.
awesomplete.evaluate();
Метод выполняет повторную обработку текущего значения input и обновляет список подсказок.
Внутренне происходит:
filter)data)Используется при:
minChars, list,
filterХотя прямой метод установки значения не всегда документирован как
основной API, изменение состояния обычно сопровождается вызовом
evaluate():
input.value = "Mos";
awesomplete.evaluate();
Такой подход гарантирует синхронизацию UI и внутреннего состояния.
Список подсказок может быть изменён динамически:
awesomplete.list = ["London", "Los Angeles", "Lisbon"];
awesomplete.evaluate();
После обновления списка требуется повторная оценка, иначе интерфейс останется в старом состоянии.
Фильтрация контролируется функцией filter:
awesomplete.filter = function(text, input) {
return text.toLowerCase().includes(input.toLowerCase());
};
Программное изменение фильтра позволяет:
awesomplete.destroy();
Метод полностью удаляет:
После вызова экземпляр становится нерабочим и требует повторной инициализации для дальнейшего использования.
Программное управление часто опирается на внутренние состояния:
opened — открыт ли списокselectedIndex — текущий индекс выбораinput.value — источник фильтрацииИзменение этих состояний напрямую не рекомендуется, но используется в расширениях логики поверх библиотеки.
Программные методы часто комбинируются с DOM-событиями:
input.addEventListener("focus", () => awesomplete.open());
input.addEventListener("blur", () => awesomplete.close());
Также возможно принудительное обновление при изменении данных:
fetch("/cities")
.then(r => r.json())
.then(data => {
awesomplete.list = data;
awesomplete.evaluate();
});
Типичный сценарий программного управления строится на последовательных вызовах:
awesomplete.open();
awesomplete.goto(0);
awesomplete.select();
Такой набор действий позволяет полностью эмулировать пользовательский выбор без взаимодействия с клавиатурой.
В системах автозаполнения часто требуется внешний контроль:
function setCity(city) {
input.value = city;
awesomplete.evaluate();
awesomplete.open();
}
Этот паттерн используется при:
Несмотря на широкий API, ряд аспектов остаётся внутренним:
Поэтому управление строится через публичные методы, а не через прямое вмешательство в состояние объекта.