Choices.js предоставляет механизм преобразования стандартного HTML
<select> в управляемый компонент с расширенными
возможностями поиска, кастомизации и контроля состояния. В случае
одиночного выбора (single select) поведение библиотеки сохраняет
семантику HTML-элемента, дополняя его интерфейсом фильтрации и
улучшенной обработкой вариантов.
Исходный элемент формируется в виде стандартного select:
<select id="city-select">
<option value="msk">Москва</option>
<option value="spb">Санкт-Петербург</option>
<option value="kzn">Казань</option>
</select>
Инициализация Choices.js выполняется через создание экземпляра класса
Choices, в который передаётся DOM-элемент:
const element = document.getElementById('city-select');
const cityChoices = new Choices(element);
После выполнения инициализации стандартный
<select> заменяется кастомизированной структурой, при
этом исходные значения и атрибуты сохраняются внутри внутреннего
состояния библиотеки.
В режиме single select Choices.js обеспечивает строгое поддержание одного выбранного значения. При выборе нового элемента предыдущий выбор автоматически заменяется.
Ключевые характеристики поведения:
<select>changeВнутренне библиотека отслеживает состояние выбранного элемента и обновляет DOM без необходимости ручного вмешательства.
Choices.js принимает второй параметр — объект конфигурации, который позволяет управлять поведением компонента.
const cityChoices = new Choices(element, {
searchEnabled: true,
itemSelectText: '',
shouldSort: false
});
Основные параметры, влияющие на одиночный select:
Пример с настройкой плейсхолдера:
const cityChoices = new Choices(element, {
placeholderValue: 'Выбор города',
searchEnabled: false
});
Одиночный select часто включает пустое значение, используемое как начальное состояние.
<select id="city-select">
<option value="">Выберите город</option>
<option value="msk">Москва</option>
<option value="spb">Санкт-Петербург</option>
</select>
Choices.js интерпретирует пустой option как placeholder при соответствующей конфигурации:
const cityChoices = new Choices(element, {
placeholder: true,
placeholderValue: 'Выберите город',
removeItemButton: false
});
При этом внутреннее состояние компонента сохраняет отсутствие выбранного значения до момента выбора конкретного элемента.
Choices.js предоставляет API для управления выбранным значением после инициализации. В одиночном select любое новое значение заменяет текущее.
cityChoices.setChoiceByValue('kzn');
Смена значения через API эквивалентна пользовательскому выбору из интерфейса.
Дополнительно доступны методы:
cityChoices.getValue();
cityChoices.clearStore();
getValue() возвращает текущее состояние выбора, включая
значение и метаданные выбранного option.
Компонент генерирует события, синхронизированные с состоянием оригинального select.
element.addEventListener('change', function(event) {
console.log(event.target.value);
});
Choices.js также предоставляет собственные события через API экземпляра:
Пример подписки:
cityChoices.passedElement.element.addEventListener(
'addItem',
function(event) {
console.log(event.detail.value);
}
);
Одиночный select может быть обновлён после инициализации без пересоздания экземпляра.
cityChoices.setChoices([
{ value: 'msk', label: 'Москва' },
{ value: 'ekb', label: 'Екатеринбург' }
], 'value', 'label', true);
Четвёртый параметр управляет очисткой текущих элементов перед обновлением.
Внутреннее состояние Choices.js связано с DOM-элементом
<select>. Это обеспечивает:
Любое изменение через UI или API приводит к обновлению
selectedIndex и соответствующего value у
исходного элемента.
Для одиночного select важно отсутствие флага
removeItemButton в контексте множественного выбора,
поскольку он не применяется к single mode. Поведение строго фиксируется
одним активным элементом, а попытки добавления дополнительных значений
игнорируются на уровне логики компонента.
Если исходный <select> содержит выбранный option,
Choices.js автоматически подхватывает его при инициализации:
<select id="city-select">
<option value="msk">Москва</option>
<option value="spb" selected>Санкт-Петербург</option>
</select>
После создания экземпляра:
const cityChoices = new Choices(element);
текущее состояние компонента синхронизируется с выбранным
selected элементом без дополнительной настройки.