Метод previous отвечает за перемещение активного
выделения (highlight) вверх по списку подсказок в выпадающем меню
автодополнения. Он является частью механизма навигации внутри компонента
и тесно связан с методами управления списком, такими как
next, open, close и внутренним
состоянием активного элемента.
В типичном сценарии использования Awesomplete список
подсказок отображается под полем ввода, и пользователь может
перемещаться по элементам клавишами стрелок. previous
реализует программный эквивалент нажатия клавиши ↑ (ArrowUp).
Метод previous изменяет индекс текущего выделенного
элемента списка, уменьшая его на единицу. Если активный элемент
отсутствует, поведение зависит от состояния компонента:
Основная задача метода — обеспечить линейную навигацию вверх по результатам автодополнения.
Внутри Awesomplete навигация по списку реализована через
индекс текущего активного элемента. Условно логика previous
может быть представлена следующим образом:
При этом метод работает не с DOM напрямую, а через внутренние структуры данных, которые затем синхронизируются с отображением.
При вызове previous активный индекс уменьшается:
При достижении нуля дальнейшее поведение зависит от реализации:
Если ни один элемент не выделен, previous может:
Такое поведение обеспечивает предсказуемую навигацию при первом нажатии клавиши вверх.
При отсутствии результатов метод не выполняет никаких действий. Проверка на наличие элементов выполняется до изменения состояния.
previous является зеркальным отражением метода
next.
next увеличивает индекс активного элемента.previous уменьшает индекс активного элемента.Оба метода используют одну и ту же модель состояния и одинаковые механизмы обновления интерфейса. Разница заключается только в направлении движения по массиву подсказок.
Метод может вызываться напрямую через экземпляр
Awesomplete:
const input = document.querySelector("input");
const awesomplete = new Awesomplete(input, {
list: ["Apple", "Apricot", "Avocado", "Banana", "Blueberry"]
});
Программное перемещение вверх по списку:
awesomplete.previous();
Такой вызов эквивалентен нажатию стрелки вверх при открытом списке подсказок.
Метод previous обычно вызывается внутри обработчика
клавиатуры, привязанного к полю ввода. Логика сопоставления клавиш:
previous()next()Пример обработки:
input.addEventListener("keydown", function (event) {
switch (event.key) {
case "ArrowUp":
awesomplete.previous();
event.preventDefault();
break;
case "ArrowDown":
awesomplete.next();
event.preventDefault();
break;
}
});
preventDefault() используется для предотвращения
стандартного поведения курсора в поле ввода.
При вызове previous происходит пересинхронизация
состояния списка и DOM:
Прокрутка особенно важна при большом количестве подсказок, когда список выходит за пределы видимой области.
В некоторых реализациях автодополнения используется циклическая навигация, при которой:
previous переносит
выделение на последний элемент списка.Такое поведение имитирует кольцевой список и позволяет ускорить навигацию без необходимости возвращаться мышью.
Awesomplete часто работает с динамически
отфильтрованными данными. После каждого ввода:
previous начинает работу с нового состояния.Это означает, что индексы не являются постоянными — они пересчитываются после каждого обновления списка.
Если выпадающий список закрыт, вызов previous
обычно:
Поведение зависит от внутренней логики экземпляра и контекста вызова.
Метод previous не изменяет значение поля ввода напрямую.
Он только меняет активный элемент списка.
Изменение input.value происходит только при:
Это разделение позволяет пользователю перемещаться по списку без потери текущего ввода.
При использовании кастомного рендера элементов (item,
replace и т.п.) previous продолжает работать
на уровне индексов, не завися от визуального представления.
Однако важно учитывать:
При необходимости метод previous может быть
переопределён в расширенных версиях компонента:
class ExtendedAwesomplete extends Awesomplete {
previous() {
super.previous();
console.log("Перемещение вверх по списку");
}
}
Такой подход используется для:
previous при закрытом списке без проверки
состояния;Корректная работа предполагает использование метода только в контексте активного экземпляра с валидным списком подсказок.
Метод previous имеет константную сложность O(1), так
как:
Основные ограничения связаны не с самим методом, а с размером и структурой списка, который он обслуживает.