В Awesomplete клавиши-стрелки являются основным механизмом перемещения по списку подсказок. Поведение встроено в обработчики событий клавиатуры и активируется автоматически при открытии выпадающего списка.
При вводе текста и появлении списка предложений библиотека отслеживает нажатия клавиш:
Активный элемент списка изменяется без необходимости дополнительной логики со стороны разработчика. Awesomplete управляет состоянием выделения через внутренний индекс текущего элемента.
После открытия списка подсказок первый клик по ArrowDown переводит активный элемент на первую строку. Дальнейшие нажатия перемещают выделение последовательно вниз.
ArrowUp работает симметрично, позволяя двигаться вверх по уже активированному списку.
Ключевая особенность заключается в том, что список воспринимается как
циклическая структура при включённой опции list-навигации:
при достижении конца выделение может переходить к началу и наоборот, в
зависимости от конфигурации.
Awesomplete хранит индекс активного элемента внутри экземпляра компонента. При каждом нажатии стрелок выполняются следующие действия:
Активный элемент получает CSS-класс:
li[aria-selected="true"] {
background: #e9e9e9;
}
Внутренний обработчик клавиатуры реализует поведение, аналогичное следующему псевдокоду:
input.addEventListener("keydown", function (event) {
switch (event.keyCode) {
case 40: // ArrowDown
awesomplete.next();
event.preventDefault();
break;
case 38: // ArrowUp
awesomplete.previous();
event.preventDefault();
break;
}
});
Методы next() и previous() изменяют
активный индекс и перерисовывают выделение.
При достижении границ списка возможны два сценария:
Поведение зависит от конфигурации и внутреннего состояния списка. При большом количестве элементов циклическая навигация позволяет ускорить выбор без возврата к мыши или повторного ввода.
Навигация стрелками тесно связана с состоянием input-поля. При перемещении по списку:
Это позволяет безопасно просматривать варианты без потери введённых данных.
Если пользователь продолжает печатать во время навигации стрелками:
Это предотвращает рассинхронизацию между текущим запросом и отображаемыми результатами.
Для корректной работы навигации Awesomplete блокирует стандартные действия клавиш:
Это достигается через event.preventDefault(), что
гарантирует, что стрелки управляют только списком, а не интерфейсом
страницы.
Нажатие Enter после навигации стрелками приводит к выбору активного элемента. Логика выглядит следующим образом:
awesomplete-selectcomplete срабатываетТаким образом стрелки являются подготовительным этапом выбора.
Если список подсказок пуст:
Это предотвращает ошибки при отсутствии данных и исключает некорректные состояния.
При навигации стрелками Awesomplete синхронизирует состояние с ARIA-атрибутами:
aria-selectedaria-activedescendantЭто обеспечивает корректную работу с экранными читалками. Каждый шаг по списку обновляет связку input → active item.
Разработчик может переопределить стандартную логику, используя обработчики событий:
input.addEventListener("keydown", function (e) {
if (e.key === "ArrowDown") {
// кастомная логика перед переходом вниз
}
});
При необходимости стандартное поведение можно полностью отключить, не вызывая встроенные методы Awesomplete.
Навигация стрелками и наведение мышью используют единое состояние активного элемента. При движении курсора:
Поведение стрелок может незначительно отличаться в зависимости от браузера:
Awesomplete нормализует эти различия через единый обработчик событий клавиатуры, минимизируя платформенные расхождения.
При закрытии списка происходит сброс:
-1При повторном открытии навигация начинается с нулевого состояния независимо от предыдущих действий.