Событие highlightItem в Choices.js срабатывает в момент,
когда пользователь или программная логика изменяет состояние подсветки
элемента в списке доступных опций. Подсветка (highlight) отличается от
выбора тем, что элемент не добавляется в выбранные значения, а лишь
становится активным в выпадающем интерфейсе, что особенно важно при
навигации с клавиатуры и при кастомной отрисовке списка.
Внутренне Choices.js использует систему управления состояниями
списка, где каждый элемент проходит через этапы отображения: фильтрация,
рендеринг, навигация и взаимодействие. Событие
highlightItem относится к стадии навигационного
взаимодействия и фиксирует текущий активный элемент списка.
highlightItem вызывается в следующих сценариях:
Каждое изменение выделения инициирует новый вызов события, даже если предыдущий и новый элемент различаются только индексом.
Событие передает объект, содержащий контекст текущего состояния списка. Типичная структура выглядит следующим образом:
{
id: 12,
value: "option_value",
label: "Option Label",
group: null,
active: true,
highlighted: true,
customProperties: {},
score: 0.87
}
Ключевые поля:
id — внутренний идентификатор элементаvalue — значение, которое будет использовано при
выбореlabel — отображаемый текстactive — флаг активности элемента в DOM-структуреhighlighted — подтверждение состояния подсветкиcustomProperties — пользовательские метаданные,
привязанные к опцииscore — релевантность при поисковой фильтрацииChoices.js предоставляет систему событий, основанную на
on-подписках. Подключение обработчика для
highlightItem осуществляется через экземпляр
компонента.
const choices = new Choices('#select', {
shouldSort: false
});
choices.passedElement.element.addEventListener(
'highlightItem',
(event) => {
console.log('Highlighted:', event.detail);
}
);
В большинстве случаев данные события передаются в
event.detail, где содержится объект элемента.
При использовании клавиатуры highlightItem становится
центральным механизмом управления визуальной подсветкой. При каждом
нажатии клавиши:
highlightItemВажно учитывать, что событие может срабатывать очень часто при удержании клавиши, что влияет на производительность обработчиков.
При включенной поисковой строке Choices.js
(searchEnabled: true) событие highlightItem
тесно связано с фильтрацией списка.
После ввода текста:
highlightItem без пользовательского
навигационного действияЭто поведение важно учитывать при реализации кастомной логики подсветки, так как событие может возникать синтетически.
В экосистеме Choices.js существует несколько близких событий:
change — фиксирует изменение выбранных значенийaddItem — добавление элемента в выбранныеremoveItem — удаление выбранного элементаsearch — изменение поискового запросаhighlightItem — изменение активного (но не выбранного)
элементаКлючевое отличие highlightItem заключается в отсутствии
модификации состояния выбранных данных. Это исключительно UI-событие
навигации.
При построении собственного интерфейса поверх Choices.js
highlightItem используется для синхронизации состояния
интерфейса:
Пример интеграции:
choices.passedElement.element.addEventListener('highlightItem', (event) => {
const item = event.detail;
updatePreviewPanel({
title: item.label,
meta: item.customProperties
});
});
При работе с событием наблюдаются характерные нюансы:
Эти особенности связаны с внутренней моделью виртуального списка, используемой Choices.js.
Так как highlightItem может вызываться с высокой
частотой, обработчики должны быть легковесными. Типичные проблемы:
Практика обработки:
let lastId = null;
choices.passedElement.element.addEventListener('highlightItem', (event) => {
const item = event.detail;
if (item.id === lastId) return;
lastId = item.id;
requestAnimationFrame(() => {
renderSidebar(item);
});
});
В комплексных формах highlightItem часто используется
как триггер вспомогательной логики:
Такое использование превращает событие из простого UI-индикатора в механизм синхронизации интерфейсных модулей.
Choices.js позволяет изменять highlight программно через внутренние методы. При этом:
highlightItem также генерируетсяЭто обеспечивает единообразие логики независимо от источника изменения состояния.