Мультиселект с тегами в Choices.js представляет собой расширенный режим работы компонента, при котором пользователь может не только выбирать несколько значений из списка, но и создавать собственные пользовательские элементы, которые динамически превращаются в теги. Такой подход особенно полезен в формах, где набор значений заранее не фиксирован: ввод навыков, ключевых слов, email-адресов, категорий, фильтров и любых произвольных сущностей.
В стандартном режиме мультиселект позволяет выбирать несколько
значений из заранее определённого списка <option>.
При включении режима тегов появляется дополнительная возможность — ввод
новых значений вручную. Каждое введённое значение преобразуется в
отдельный тег внутри поля выбора.
Ключевая особенность заключается в том, что Choices.js объединяет два источника данных:
Таким образом формируется гибридная модель данных, где список расширяется во время взаимодействия.
Для работы в режиме мультиселекта необходимо указать атрибут
multiple в элементе <select>. После
этого Choices.js может быть инициализирован с дополнительной
конфигурацией.
<select id="tags" multiple></select>
Инициализация:
const choices = new Choices('#tags', {
removeItemButton: true,
duplicateItemsAllowed: false
});
Сам по себе мультиселект уже позволяет выбирать несколько значений, однако для превращения его в систему тегов требуется включение пользовательского ввода.
Основной механизм тегирования включается через опцию
addItems и поведение, связанное с вводом новых
значений.
const choices = new Choices('#tags', {
removeItemButton: true,
duplicateItemsAllowed: false,
addItems: true,
paste: true
});
В этом режиме пользователь может вводить текст в поле поиска, и при нажатии клавиши подтверждения (например, Enter) создаётся новый элемент.
Создание нового тега обычно привязывается к клавишам разделения. Наиболее распространённые:
Choices.js позволяет управлять этим поведением через конфигурацию:
const choices = new Choices('#tags', {
delimiter: ',',
editItems: true,
addItems: true,
addItemFilter: null
});
Параметр delimiter определяет символ, который разделяет
вводимые значения при вставке текста.
При включённой возможности добавления тегов возникает необходимость
контролировать допустимые значения. Для этого используется
addItemFilter, который принимает функцию.
const choices = new Choices('#tags', {
addItems: true,
addItemFilter: (value) => {
return value.length > 2;
}
});
Фильтр позволяет ограничить:
В мультиселекте с тегами важной частью является управление уже добавленными элементами. Choices.js поддерживает удаление через кнопки и программное управление.
const choices = new Choices('#tags', {
removeItemButton: true,
editItems: true
});
При включении editItems пользователь может изменять уже
созданные теги, что превращает компонент в более гибкий инструмент
управления списком значений.
Теги можно добавлять не только через интерфейс, но и через API библиотеки.
choices.setChoiceByValue('JavaScript');
choices.setValue([{ value: 'TypeScript', label: 'TypeScript' }]);
Для добавления новых значений используется метод
setValue, который принимает массив объектов.
Также возможно динамическое добавление:
choices.setChoices([
{ value: 'react', label: 'React' },
{ value: 'vue', label: 'Vue' }
], 'value', 'label', true);
В реальных интерфейсах часто требуется ограничить число выбранных или
созданных тегов. Это реализуется через maxItemCount.
const choices = new Choices('#tags', {
maxItemCount: 5,
removeItemButton: true
});
При достижении лимита интерфейс блокирует добавление новых элементов, сохраняя целостность данных формы.
Теги часто должны быть уникальными. Для этого используется параметр
duplicateItemsAllowed.
const choices = new Choices('#tags', {
duplicateItemsAllowed: false
});
При попытке добавить существующее значение оно игнорируется или подсвечивается как уже выбранное.
При создании тегов важную роль играет нормализация строки ввода. Часто необходимо:
Choices.js позволяет реализовать такую обработку через
addItemFilter:
const choices = new Choices('#tags', {
addItems: true,
addItemFilter: (value) => {
const normalized = value.trim().toLowerCase();
return normalized.length > 0;
}
});
Часто пользователь вставляет строку сразу с несколькими значениями.
Для этого используется delimiter.
const choices = new Choices('#tags', {
delimiter: ',',
addItems: true
});
Ввод:
javascript, typescript, react
Автоматически преобразуется в три отдельных тега.
Мультиселект с тегами часто используется вместе с динамическими источниками данных. Например, при поиске существующих значений с сервера.
const choices = new Choices('#tags', {
searchEnabled: true,
shouldSort: false
});
При этом пользователь может:
Такой подход используется в системах с большими справочниками и гибкими пользовательскими данными.
Choices.js предоставляет API для полного управления состоянием:
Удаление:
choices.removeActiveItems();
Очистка:
choices.clearStore();
Добавление и обновление позволяют строить динамические интерфейсы, где теги зависят от внешних событий приложения.
При проектировании интерфейсов важно учитывать поведение компонента:
Choices.js решает часть этих задач встроенными механизмами, однако логика ограничения и нормализации данных часто остаётся на стороне разработчика.
Мультиселект с тегами используется в следующих сценариях:
Каждый из этих случаев требует сочетания гибкости ввода и структурированного хранения значений, что и обеспечивает Choices.js в режиме тегов.