В Choices.js выбранные значения представляются как структурированные элементы интерфейса, формируемые на основе внутренней модели данных компонента. Каждое выбранное значение превращается в объект item, содержащий минимум два ключевых поля: value и label. Именно label используется для отображения пользователю, а value — для хранения и передачи данных формы.
Отрисовка выбранных элементов происходит внутри отдельного контейнера, который отделён от списка доступных опций. В режиме множественного выбора каждый элемент превращается в визуальный «ток» (tag/chip), в режиме одиночного выбора — в единственное значение внутри поля ввода.
При использовании single select интерфейс отображает
только одно выбранное значение. Оно заменяет плейсхолдер и занимает
основную область input-поля.
Ключевые особенности:
Поведение управляется внутренним состоянием, где массив выбранных элементов ограничен одним объектом.
В режиме multiple каждый выбранный элемент отображается
как отдельный блок внутри контейнера выбранных значений.
Типичный элемент включает:
Пример логики представления:
Каждый такой элемент является независимой единицей интерфейса.
Отображение выбранных значений строится на концепции токенов (chips). Каждый токен содержит:
removeItemButton);Основной классический CSS-узел:
.choices__item.choices__item--selectable.choices__item--choice (для списка).choices__item--selectedВнутренне Choices.js различает элементы списка опций и элементы выбранных значений, несмотря на схожую структуру классов.
Ключевая настройка:
removeItemButton: trueПри включении параметра каждый выбранный элемент получает кнопку удаления, которая:
removeItem.Если отключена, выбранные значения становятся статичными и могут быть удалены только программно.
Для управления визуальной перегрузкой применяется параметр:
maxItemCountПри превышении лимита Choices.js заменяет отображение на информационный блок:
При этом логика хранения остаётся прежней, но UI блокирует дальнейшее добавление.
Дополнительно используется:
maxItemTextОн определяет текст сообщения при превышении лимита.
Параметр:
shouldSortВлияет на порядок отображения выбранных элементов:
true — элементы сортируются по алфавиту или заданному
comparator;false — сохраняется порядок выбора пользователем.Сортировка влияет только на UI-порядок, не затрагивая порядок исходного массива данных.
Ключевая настройка визуализации:
renderSelectedChoicesВозможные значения:
true — выбранные элементы отображаются как токены в
input;false — выбранные элементы не отображаются внутри
input, но сохраняются в состоянии.Используется в сценариях, где визуальное отображение должно быть скрыто (например, кастомный UI поверх Choices.js).
Choices.js позволяет полностью переопределить визуальную структуру выбранных элементов через:
callbackOnCreateTemplatesЭто функция, возвращающая набор шаблонов для:
Пример логики кастомизации:
Шаблон item отвечает напрямую за отображение выбранного
значения в интерфейсе.
Если выбранных значений нет, отображается placeholder:
placeholderПоведение зависит от режима:
При отображении длинных label-значений применяется:
Choices.js не изменяет текст, а лишь управляет его визуальной обёрткой.
Каждый выбранный элемент получает:
aria-selected="true"role="option" (в зависимости от режима)Удаление элементов также сопровождается обновлением доступных ARIA-состояний, чтобы интерфейс оставался совместимым со screen reader.
Изменение отображаемых значений возможно через API:
setValue() — установка выбранных значений;removeItem(item) — удаление конкретного значения;clearStore() — очистка всех выбранных элементов;getValue() — получение текущего состояния.При каждом изменении автоматически пересоздаётся DOM выбранных элементов.
При установке disabled: true:
Это позволяет сохранять отображение без возможности изменения.
В реальных интерфейсах Choices.js часто используется для:
В каждом сценарии отображение выбранных значений адаптируется через:
Отображение выбранных значений основано на синхронной модели:
Таким образом UI всегда является отражением внутреннего состояния, а не независимой сущностью.