Событие awesomplete-close возникает в момент, когда
выпадающий список автодополнения в Awesomplete закрывается или готовится
к закрытию. Оно является частью событийной модели библиотеки и позволяет
перехватывать момент завершения отображения подсказок до фактического
скрытия интерфейса.
Событие дискретное и привязано к жизненному циклу выпадающего списка: оно срабатывает каждый раз, когда список предложений перестаёт быть видимым по любой причине, связанной с логикой Awesomplete.
Событие инициируется непосредственно перед тем, как список подсказок удаляется из DOM или скрывается через CSS-механизмы библиотеки. Это делает его ключевой точкой для вмешательства в процесс закрытия.
Основные ситуации, при которых вызывается
awesomplete-close:
Esc;Важная особенность заключается в том, что событие может быть перехвачено до завершения закрытия.
Событие представляет собой CustomEvent, привязанный к
DOM-элементу input, на котором инициализирован Awesomplete.
Типичная структура:
type: "awesomplete-close"target: input-элементinstance: ссылка на экземпляр Awesomplete (доступна
через event.target.awesomplete или внутренние поля)cancelable: trueФакт отменяемости события играет ключевую роль в управлении поведением списка.
Событие может быть отменено через
event.preventDefault(). В этом случае список подсказок
остаётся открытым, даже если стандартная логика Awesomplete инициировала
его закрытие.
Это позволяет реализовывать нестандартные сценарии управления интерфейсом.
Пример перехвата:
const input = document.querySelector("#search");
input.addEventListener("awesomplete-close", function (event) {
if (input.dataset.lockDropdown === "true") {
event.preventDefault();
}
});
В данном случае закрытие блокируется при наличии флага
lockDropdown.
Если событие отменено:
Отмена закрытия не приводит к ошибкам, но может вызвать рассинхронизацию состояния UI, если логика приложения не учитывает постоянное отображение списка.
Событие используется для синхронизации состояния интерфейса, когда закрытие списка должно влиять на другие элементы.
input.addEventListener("awesomplete-close", (e) => {
document.querySelector(".hint-panel").classList.remove("active");
});
При подгрузке данных из API список может быть временно зафиксирован открытым состоянием.
let loading = false;
input.addEventListener("awesomplete-close", (e) => {
if (loading) {
e.preventDefault();
}
});
Закрытие списка часто используется как триггер фиксации выбранного значения.
input.addEventListener("awesomplete-close", (e) => {
console.log("Dropdown closed, current value:", input.value);
});
Awesomplete использует несколько событий для управления жизненным циклом подсказок:
awesomplete-open — открытие списка;awesomplete-close — закрытие списка;awesomplete-select — выбор элемента до
подстановки;awesomplete-selectcomplete — завершённая подстановка
значения;awesomplete-highlight — изменение активного
элемента.awesomplete-close отличается тем, что не связан с
выбором конкретного элемента, а отражает именно завершение визуального
взаимодействия со списком.
Закрытие списка может происходить по разным причинам, и событие не содержит явного поля причины, поэтому её обычно определяют косвенно:
input.value;Пример логирования поведения:
input.addEventListener("awesomplete-close", () => {
console.log("Awesomplete closed at", new Date().toISOString());
});
При потере фокуса поле ввода часто инициирует закрытие списка. Однако
отмена события awesomplete-close не возвращает фокус
автоматически. Это означает, что список может оставаться открытым даже
при неактивном input, если дополнительно не управлять фокусом
вручную.
Awesomplete позволяет закрывать список через API, например:
awesomplete.close();
В этом случае также генерируется событие
awesomplete-close, что обеспечивает единообразие обработки
вне зависимости от источника закрытия.
При активной кастомизации возможны следующие нюансы:
Эти эффекты не являются ошибками, а отражают событийную природу работы библиотеки.
input.addEventListener("awesomplete-close", () => {
state.dropdownOpen = false;
});
input.addEventListener("awesomplete-close", () => {
analytics.track("autocomplete_closed");
});
input.addEventListener("awesomplete-close", () => {
dropdownShadow.classList.remove("visible");
});
Если на странице используется несколько экземпляров Awesomplete,
каждое событие awesomplete-close изолировано и относится
только к конкретному input-элементу. Это позволяет безопасно управлять
множественными автодополнениями без пересечения состояния между
ними.