Метод goto отвечает за программное перемещение активного
выделения (highlight) внутри списка подсказок автодополнения. Он
управляет индексом текущего выбранного элемента в выпадающем списке и
используется как низкоуровневый механизм навигации, на котором строятся
более высокоуровневые действия вроде next и
previous.
Основная задача goto — изменить текущую позицию курсора
выбора в списке результатов автодополнения. В отличие от методов,
которые просто открывают или закрывают список, goto
напрямую влияет на внутреннее состояние навигации.
Ключевая особенность:
Внутренняя форма метода в контексте Awesomplete выглядит следующим образом:
awesomplete.goto(index, up)
Где:
index — целевой индекс элемента в списке
подсказок;up — логический флаг направления движения (используется
для корректировки поведения при выходе за границы списка).В некоторых реализациях и форках библиотеки встречается упрощённая форма:
awesomplete.goto(i)
где второй параметр либо вычисляется автоматически, либо не используется напрямую в пользовательском коде.
При вызове goto выполняется несколько внутренних
шагов:
Проверка наличия списка подсказок.
Нормализация индекса.
[0, items.length - 1].Обновление внутреннего состояния.
Обновление DOM.
aria-selected или аналогичный внутренний класс
Awesomplete).Синхронизация доступности (ARIA).
Awesomplete хранит состояние текущего выбора в переменной, условно
обозначаемой как selectedIndex. Метод goto
напрямую изменяет это значение.
Поведение можно описать псевдологикой:
this.selectedIndex = i;
this.evaluate();
где:
selectedIndex — индекс текущего выделенного
элемента;evaluate() — перерисовка списка и обновление состояния
UI.Важно, что goto не выполняет выбор значения. Он лишь
изменяет активную позицию.
Метод goto является базовым строительным блоком для
навигации, тогда как next и previous — это
обёртки над ним.
next() обычно вызывает
goto(selectedIndex + 1)previous() вызывает
goto(selectedIndex - 1)Таким образом:
goto — абсолютное позиционирование;next/previous — относительное перемещение.Особое внимание уделяется поведению при достижении границ:
Если индекс становится меньше 0:
Если индекс превышает длину массива:
Такая логика обеспечивает как циклическую навигацию, так и линейную, в зависимости от настроек.
Метод goto применяется в следующих ситуациях:
awesomplete.goto(3);
Используется для установки активного элемента по заранее известному индексу.
При кастомной фильтрации списка:
awesomplete.list = filtered;
awesomplete.goto(0);
После обновления данных устанавливается первый элемент как активный.
При обработке клавиш стрелок:
if (key === "ArrowDown") {
awesomplete.goto(awesomplete.selectedIndex + 1);
}
Каждый вызов goto обычно сопровождается вызовом
evaluate, который отвечает за:
Таким образом, goto не является изолированной операцией
— он встроен в цикл обновления интерфейса.
Внутренняя реализация метода оптимизирована под минимальное количество DOM-операций. В типичном случае:
Это важно для производительности при больших списках.
Метод имеет несколько функциональных ограничений:
select;Если список подсказок пуст:
selectedIndex обычно устанавливается в
-1;Awesomplete активно использует ARIA-атрибуты, и goto
обновляет:
aria-selected="true" для активного элемента;aria-activedescendant у поля ввода.Это обеспечивает корректную работу с экранными дикторами и вспомогательными технологиями.
awesomplete.goto("abc");
Результат:
NaN и сброс поведения.awesomplete.goto(9999);
Результат:
Метод может отработать, но визуального эффекта не будет.
goto является центральным элементом навигационного слоя
библиотеки. Он связывает:
Фактически, вся система перемещения по подсказкам строится вокруг этой функции, а остальные методы лишь делегируют ей управление индексом.