Работа с Choices.js начинается с привязки библиотеки к DOM-элементу
формы. Основная идея заключается в том, что обычный
<select> или <input> заменяется
управляемым JavaScript-экземпляром, который расширяет стандартное
поведение и добавляет поиск, мультивыбор, теги и управление списком
опций.
Базовый объект библиотеки создаётся через конструктор:
new Choices(element, options);
Ключевым элементом здесь выступает element, который
должен ссылаться на DOM-ноду.
Перед инициализацией необходимо получить ссылку на элемент формы.
Наиболее распространённый способ — использование
querySelector:
const selectElement = document.querySelector('#my-select');
Также допустимо использование любых валидных селекторов:
const element = document.querySelector('.js-choice');
Важно, чтобы элемент существовал в DOM на момент инициализации. Часто это обеспечивается обработчиком загрузки страницы:
document.addEventListener('DOMContentLoaded', () => {
const element = document.querySelector('#my-select');
});
Минимальная форма подключения выглядит следующим образом:
const element = document.querySelector('#my-select');
const choices = new Choices(element);
В этом случае библиотека применяет стандартные настройки:
<select>)Экземпляр сохраняется в переменной choices, что
позволяет в дальнейшем управлять поведением компонента.
Choices.js позволяет передавать второй аргумент — объект конфигурации:
const choices = new Choices(element, {
searchEnabled: true,
removeItemButton: true,
shouldSort: false
});
Структура объекта всегда плоская и описывает поведение компонента:
searchEnabled — включает или отключает поиск по
спискуremoveItemButton — добавляет кнопку удаления выбранного
элементаshouldSort — управляет сортировкой элементовОпции применяются во время создания экземпляра и не требуют дополнительной настройки после инициализации.
Choices.js автоматически определяет тип элемента.
<select id="my-select">
<option value="1">Первый</option>
<option value="2">Второй</option>
</select>
const choices = new Choices(document.querySelector('#my-select'));
В этом режиме библиотека заменяет стандартный dropdown на кастомный интерфейс.
Если у <select> указан атрибут
multiple, Choices.js автоматически переключается в режим
списка выбранных элементов:
<select id="tags" multiple>
<option value="js">JavaScript</option>
<option value="css">CSS</option>
</select>
const choices = new Choices(document.querySelector('#tags'), {
removeItemButton: true
});
Каждый выбранный элемент становится отдельным “тегом”, который можно удалять.
Choices.js поддерживает режим ввода произвольных значений:
<input id="tags-input" type="text">
const choices = new Choices(document.querySelector('#tags-input'), {
delimiter: ',',
editItems: true
});
В этом случае пользователь может вводить значения вручную, разделяя
их символом ,.
После инициализации возвращается объект, содержащий методы управления:
const choices = new Choices(element);
Этот объект предоставляет доступ к:
Пример структуры использования:
choices.setValue(['value1']);
choices.clearStore();
choices.destroy();
Помимо HTML-разметки, список опций можно задавать программно:
const choices = new Choices(element, {
choices: [
{ value: '1', label: 'Первый' },
{ value: '2', label: 'Второй' }
]
});
Каждый объект описывает отдельный элемент списка:
value — значение, отправляемое в формуlabel — отображаемый текстChoices.js не ограничивает количество экземпляров на странице. Каждый элемент создаётся отдельно:
document.querySelectorAll('.js-choice').forEach((el) => {
new Choices(el);
});
Такой подход используется при динамически генерируемых формах, где количество полей заранее неизвестно.
Повторное создание экземпляра на одном и том же элементе приводит к конфликтам интерфейса. Для контроля используется сохранение ссылки:
const element = document.querySelector('#my-select');
if (!element.dataset.choicesInitialized) {
new Choices(element);
element.dataset.choicesInitialized = 'true';
}
Альтернативный подход — хранение экземпляра в переменной или структуре состояния приложения.
Choices.js позволяет минимизировать функциональность для упрощённых интерфейсов:
const choices = new Choices(element, {
searchEnabled: false,
itemSelectText: '',
shouldSort: false,
removeItemButton: false
});
Такой режим часто используется для компактных dropdown-списков без поиска и дополнительных элементов управления.
Критическим моментом является синхронизация с DOM. При работе с динамически загружаемыми компонентами инициализация выполняется после вставки элемента в документ:
function initSelect(container) {
const element = container.querySelector('select');
return new Choices(element);
}
Если элемент создаётся асинхронно, инициализация всегда выполняется после вставки HTML, иначе библиотека не сможет построить структуру интерфейса.
После вызова конструктора происходят этапы:
Именно на этапе инициализации формируется связка между исходным
<select> и новым интерфейсом, который управляется
через JavaScript API.