Мультиселект в Choices.js представляет собой расширенную форму
стандартного HTML-элемента <select multiple>,
дополненную поиском, управлением тегами, кастомизацией отображения и
гибкой работой с данными. Библиотека преобразует обычный список опций в
интерактивный компонент, позволяющий выбирать несколько значений,
добавлять и удалять элементы, а также управлять выбранным состоянием
через API.
Основой для инициализации мультиселекта служит стандартный HTML-элемент:
<select id="tags" multiple>
<option value="js">JavaScript</option>
<option value="ts">TypeScript</option>
<option value="py">Python</option>
<option value="go">Go</option>
</select>
Ключевой атрибут здесь — multiple, который включает
возможность выбора нескольких значений. Без него Choices.js будет
работать в режиме одиночного выбора.
Инициализация библиотеки выполняется через конструктор:
const element = document.getElementById('tags');
const choices = new Choices(element, {
removeItemButton: true,
searchEnabled: true,
placeholderValue: 'Выбор языков',
});
После выполнения этого кода стандартный select заменяется на кастомный компонент с поддержкой тегов и поиска.
Choices.js преобразует выбранные элементы в отдельные визуальные блоки (теги). Каждый выбранный элемент:
<select>;Внутренне библиотека поддерживает состояние выбранных элементов и автоматически обновляет DOM.
Одной из ключевых возможностей мультиселекта является программное управление выбранными значениями.
choices.setChoiceByValue('js');
Этот метод выбирает значение из существующих опций.
choices.setChoiceByValue(['js', 'py']);
При включённом мультиселекте библиотека автоматически создаёт несколько выбранных тегов.
choices.setChoices([
{ value: 'rust', label: 'Rust' },
{ value: 'csharp', label: 'C#' }
], 'value', 'label', true);
Последний параметр true указывает на замену текущих
опций.
Choices.js предоставляет несколько способов удаления значений.
choices.removeActiveItemsByValue('js');
Метод удаляет элемент как из интерфейса, так и из состояния компонента.
choices.removeActiveItems();
Этот вызов полностью сбрасывает мультиселект, оставляя список опций нетронутым.
Гибкость мультиселекта определяется набором конфигурационных параметров.
const choices = new Choices(element, {
removeItemButton: true
});
При включённой опции каждый выбранный элемент получает кнопку удаления.
const choices = new Choices(element, {
maxItemCount: 3
});
При превышении лимита новые элементы не добавляются, что полезно для форм с ограничениями.
const choices = new Choices(element, {
duplicateItemsAllowed: false
});
Эта настройка предотвращает дублирование выбранных значений.
Поиск играет важную роль при большом количестве опций.
const choices = new Choices(element, {
searchEnabled: true,
searchPlaceholderValue: 'Поиск...'
});
При вводе текста библиотека фильтрует доступные элементы, оставляя только совпадения.
const choices = new Choices(element, {
searchFloor: 2
});
Здесь поиск активируется только после ввода двух символов, что снижает нагрузку при больших списках.
В мультиселекте Choices.js каждый выбранный элемент отображается как отдельный тег.
const choices = new Choices(element, {
classNames: {
item: 'custom-item',
button: 'custom-button'
}
});
Это позволяет интегрировать компонент в существующую дизайн-систему.
const choices = new Choices(element, {
renderSelectedChoices: 'auto'
});
При большом количестве выбранных элементов интерфейс автоматически адаптируется.
Мультиселект часто используется с заранее выбранными значениями.
<option value="js" selected>JavaScript</option>
<option value="py" selected>Python</option>
const choices = new Choices(element);
choices.setChoiceByValue(['js', 'py']);
Оба подхода синхронизируются и дают одинаковый результат.
Choices.js предоставляет набор событий для отслеживания изменений состояния.
element.addEventListener('addItem', function(event) {
console.log(event.detail.value);
});
element.addEventListener('removeItem', function(event) {
console.log(event.detail.value);
});
element.addEventListener('change', function(event) {
console.log(event.target.value);
});
Эти события позволяют интегрировать мультиселект в сложную бизнес-логику.
Choices.js поддерживает структурированные списки через optgroup.
<select id="langs" multiple>
<optgroup label="Frontend">
<option value="js">JavaScript</option>
<option value="ts">TypeScript</option>
</optgroup>
<optgroup label="Backend">
<option value="go">Go</option>
<option value="java">Java</option>
</optgroup>
</select>
Группы сохраняются и отображаются в интерфейсе без дополнительных настроек.
Мультиселект часто используется в динамических интерфейсах, где данные изменяются во время работы приложения.
choices.setChoices([
{ value: 'php', label: 'PHP' },
{ value: 'ruby', label: 'Ruby' }
], 'value', 'label', true);
choices.setChoices([
{ value: 'kotlin', label: 'Kotlin' }
], 'value', 'label', false);
Последний параметр определяет режим добавления.
Мультиселект автоматически интегрируется с HTML-формами. При отправке формы выбранные значения передаются как массив:
tags=js&tags=py&tags=go
Это стандартное поведение multiple select, сохранённое и
расширенное библиотекой.
Мультиселект Choices.js имеет ряд особенностей:
<select>;Эти ограничения определяют корректный подход к использованию компонента в масштабных интерфейсах.