Awesomplete строится вокруг простой модели: входное текстовое поле и
набор данных, из которых формируются подсказки. Стандартное поведение
начинается с момента подключения экземпляра к DOM-элементу
input.
<input id="city" />
const input = document.getElementById("city");
new Awesomplete(input, {
list: ["Almaty", "Astana", "Karaganda", "Shymkent"]
});
После инициализации библиотека перехватывает пользовательский ввод и начинает управлять отображением выпадающего списка. Основная логика построена на трёх этапах: чтение ввода, фильтрация списка, рендер подсказок.
Стандартное поведение предполагает, что список подсказок не отображается до тех пор, пока введённый текст не начинает соответствовать условиям активации.
События, на которые реагирует библиотека:
input — основной триггер обновления спискаfocus — потенциальное открытие списка при наличии
данныхkeydown — управление навигациейПри каждом изменении значения поля выполняется пересчёт подходящих элементов списка.
Фильтрация выполняется по префиксному совпадению. Стандартный алгоритм поведения:
Пример:
["Almaty", "Astana", "Atyrau"]
При вводе A будут показаны все элементы. При вводе
At останется только Astana и
Atyrau.
Ключевая особенность стандартного поведения — приоритет начального совпадения, а не вхождения подстроки.
После фильтрации формируется выпадающий список. Структура DOM создаётся автоматически и включает:
<li> для каждого совпаденияСтандартный рендер не требует кастомизации и использует минимальную разметку:
<ul class="awesomplete">
<li>Astana</li>
<li>Almaty</li>
</ul>
Отображение списка происходит динамически, только при наличии результатов.
Стандартное поведение ограничивает число отображаемых подсказок для
предотвращения перегрузки интерфейса. По умолчанию используется
ограничение maxItems, которое влияет на:
При превышении лимита остальные элементы отсекаются после фильтрации.
Стандартная модель взаимодействия включает поддержку клавиш:
↓ — переход к следующему элементу↑ — переход к предыдущему элементуEnter — выбор текущего элементаEsc — закрытие спискаПоведение реализовано через управление индексом активного элемента. При достижении конца списка навигация либо останавливается, либо циклически возвращается в начало (в зависимости от конфигурации, но стандартно — без циклирования).
При выборе элемента выполняется автоматическая подстановка значения в поле ввода. Процесс включает:
input.value = selectedValue;
Дополнительно триггерится событие изменения, что позволяет интеграции с формами реагировать на выбор.
При уходе фокуса с поля ввода список подсказок закрывается. Стандартное поведение:
Если элемент был выбран, значение остаётся фиксированным. Если выбор не был сделан, введённый текст сохраняется как есть.
При клике по элементу списка происходит идентичная логика выбора, как
при нажатии Enter. Дополнительно:
Поведение рассчитано на минимальную задержку между действием пользователя и обновлением состояния.
Стандартная фильтрация выполняется без учёта регистра. Это означает:
Almaty == almaty ==
ALMATYПеред сравнением строки приводятся к единому виду. Это обеспечивает предсказуемость результата независимо от способа ввода.
При пустом значении input стандартное поведение зависит от условий:
В базовой модели чаще используется скрытие списка до появления первого символа.
Стандартное поведение можно разложить на несколько состояний:
Переходы между состояниями происходят автоматически на основе событий DOM.
Если значение input изменяется программно, компонент реагирует следующим образом:
inputЭто важно для интеграции с формами, где значение может устанавливаться извне.
В стандартной конфигурации система работает по принципу минимального вмешательства:
Любые дополнительные сценарии строятся поверх этого ядра, не изменяя базовую логику.
Список создаётся динамически при первом открытии и может пересоздаваться при каждом изменении данных. В стандартном режиме:
Такой подход снижает количество операций с DOM и обеспечивает стабильную работу даже при больших списках.