Работа с Choices.js начинается с обычного HTML-элемента
<select>, который библиотека преобразует в
расширенный, управляемый компонент. Основная идея заключается в том, что
стандартный селект остаётся источником данных, а Choices.js добавляет
поверх него функциональность поиска, кастомного отображения и управления
выбором.
Минимальная структура HTML выглядит следующим образом:
<select id="simple-select">
<option value="apple">Яблоко</option>
<option value="banana">Банан</option>
<option value="orange">Апельсин</option>
<option value="grape">Виноград</option>
</select>
Ключевым моментом является сохранение семантики нативного элемента. Choices.js не заменяет его полностью, а оборачивает и синхронизирует состояние.
Перед созданием селекта необходимо подключить стили и скрипт библиотеки. Без CSS компонент будет функциональным, но визуально не оформленным.
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/choices.js/public/assets/styles/choices.min.css">
<script src="https://cdn.jsdelivr.net/npm/choices.js/public/assets/scripts/choices.min.js"></script>
Подключение через CDN обеспечивает быстрый старт без сборщика и установки пакетов. В проектах с модульной архитектурой предпочтительнее установка через npm:
npm install choices.js
После загрузки библиотеки необходимо создать экземпляр Choices и
передать в него DOM-элемент <select>.
const element = document.getElementById('simple-select');
const choices = new Choices(element);
После выполнения этого кода стандартный селект превращается в управляемый компонент с поддержкой кастомного UI.
Внутри происходит:
<select>Без дополнительных параметров Choices.js активирует набор стандартных возможностей:
<select>При этом исходный элемент остаётся в DOM и участвует в форме при отправке данных.
Даже для простого селекта можно задать базовые параметры, влияющие на поведение компонента.
const choices = new Choices(element, {
searchEnabled: false,
itemSelectText: ''
});
Разбор ключевых опций:
Для простого селекта с ограниченным числом вариантов отключение поиска часто оправдано, так как ускоряет взаимодействие.
Choices.js по умолчанию использует режим одиночного выбора, если в
<select> не указан атрибут multiple.
<select id="simple-select">
<option value="1">Первый вариант</option>
<option value="2">Второй вариант</option>
</select>
При этом библиотека:
select.valueСостояние всегда синхронизировано, что позволяет использовать компонент в обычных HTML-формах без дополнительной логики.
Choices.js предоставляет API для управления выбранным значением после инициализации.
const choices = new Choices(element);
// установка значения
choices.setChoiceByValue('banana');
Метод setChoiceByValue работает с value
опций, а не с их текстовым содержимым.
Также доступно получение текущих значений через оригинальный элемент:
console.log(element.value);
В простом селекте можно сбросить выбранное значение:
choices.removeActiveItems();
Этот метод очищает текущее состояние и возвращает компонент к исходному виду, если разрешено отсутствие выбора.
Choices.js генерирует события, позволяющие отслеживать изменения состояния селекта.
element.addEventListener('change', (event) => {
console.log(event.target.value);
});
Дополнительно библиотека предоставляет собственные события через экземпляр:
choices.passedElement.element.addEventListener(
'choice',
(event) => {
console.log(event.detail);
}
);
События позволяют интегрировать селект в сложные интерфейсы, где требуется реактивное поведение.
Для простого селекта часто важно контролировать возможность изменения состояния.
const choices = new Choices(element, {
searchEnabled: false,
shouldSort: false
});
Опция shouldSort отключает автоматическую сортировку,
сохраняя порядок, заданный в HTML.
Отключённые опции в <select> автоматически
поддерживаются библиотекой.
<option value="disabled" disabled>Недоступно</option>
Choices.js отображает такие элементы, но блокирует их выбор, сохраняя нативное поведение HTML.
После инициализации библиотека создаёт дополнительную структуру:
<select>Это позволяет полностью контролировать внешний вид через CSS, не нарушая работу формы.
Ключевые классы:
.choices.choices__inner.choices__list.choices__itemИспользование этих классов позволяет адаптировать компонент под дизайн системы.
Choices.js можно применять к группе элементов без дублирования кода.
document.querySelectorAll('.js-choice').forEach((el) => {
new Choices(el, {
searchEnabled: false
});
});
HTML:
<select class="js-choice">
<option value="a">A</option>
<option value="b">B</option>
</select>
<select class="js-choice">
<option value="x">X</option>
<option value="y">Y</option>
</select>
Такой подход используется при массовой инициализации интерфейсных компонентов.
Choices.js не нарушает стандартное поведение HTML-форм:
<select>required поддерживается нативно<select id="simple-select" required>
<option value="">Выберите значение</option>
<option value="1">Один</option>
</select>
При отсутствии выбора форма будет считаться невалидной.
Базовый селект на Choices.js применяется в случаях, когда требуется:
При этом сохраняется баланс между нативностью и расширенной функциональностью, что делает компонент универсальным для большинства интерфейсов.