Choices.js — это JavaScript-библиотека для расширения возможностей HTML-элементов формы. Она предназначена для создания улучшенных выпадающих списков, полей выбора, мультиселектов и текстовых полей с поддержкой тегов, поиска и динамического взаимодействия.
Библиотека решает распространённые проблемы стандартных элементов
<select> и <input>:
Choices.js предоставляет единый API для управления списками выбора и значительно улучшает пользовательский опыт без необходимости создавать сложные компоненты вручную.
<select>Обычный HTML-элемент <select> имеет серьёзные
ограничения:
<select>
<option>JavaScript</option>
<option>TypeScript</option>
<option>Python</option>
</select>
В браузере такой список:
Choices.js заменяет стандартное отображение на управляемый интерфейс:
const element = document.querySelector('select');
new Choices(element);
После инициализации появляется:
Choices.js умеет фильтровать элементы в режиме реального времени.
Пример:
new Choices('#languages', {
searchEnabled: true
});
При вводе текста список автоматически сокращается:
Библиотека поддерживает мультиселекты.
HTML:
<select id="skills" multiple>
<option>HTML</option>
<option>CSS</option>
<option>JavaScript</option>
</select>
Jav * aScript:
new Choices('#skills');
Выбранные значения отображаются как отдельные элементы:
Choices.js позволяет удалять выбранные значения через интерфейс.
new Choices('#skills', {
removeItemButton: true
});
Каждый выбранный элемент получает кнопку удаления.
Библиотека может превращать обычное текстовое поле в систему тегов.
<input type="text" id="tags">
new Choices('#tags', {
delimiter: ',',
editItems: true
});
Пример ввода:
JavaScript, React, Vue
После обработки значения превращаются в отдельные теги.
Choices.js поддерживает динамическое добавление элементов.
const choices = new Choices('#users');
fetch('/api/users')
.then(response => response.json())
.then(data => {
choices.setChoices(data, 'id', 'name', true);
});
Это особенно важно для:
<select id="country"></select>
<select multiple id="frameworks"></select>
<input type="text" id="tags">
Выбор только одного значения.
Выбор нескольких элементов одновременно.
Choices.js не заменяет оригинальный HTML-элемент полностью. Библиотека:
Это важно, поскольку:
Исходный код:
<select id="city">
<option>Moscow</option>
<option>Berlin</option>
</select>
После инициализации:
new Choices('#city');
Библиотека создаёт сложную структуру:
<div class="choices">
<div class="choices__inner">
...
</div>
<div class="choices__list choices__list--dropdown">
...
</div>
</div>
За счёт этого становится возможной глубокая кастомизация интерфейса через CSS.
Choices.js не требует:
Библиотека работает на чистом JavaScript.
Choices.js значительно легче многих UI-фреймворков и подходит для:
Подключение занимает несколько строк.
CDN:
<link rel="stylesheet" href="choices.min.css">
<script src="choices.min.js"></script>
Инициализация:
new Choices('#select');
Библиотека содержит большое количество параметров:
new Choices('#select', {
searchEnabled: true,
itemSelectText: '',
shouldSort: false,
removeItemButton: true
});
Можно настраивать:
| Возможность | HTML select | Choices.js |
|---|---|---|
| Поиск | Нет | Да |
| Теги | Нет | Да |
| Стилизация | Ограничена | Полная |
| Мультиселект | Ограниченный | Расширенный |
| Удаление элементов | Нет | Да |
| AJAX-загрузка | Нет | Да |
| Кастомные шаблоны | Нет | Да |
new Choices('#countries', {
searchEnabled: true
});
new Choices('#tags', {
duplicateItemsAllowed: false
});
new Choices('#stack', {
removeItemButton: true,
maxItemCount: 5
});
Choices.js часто используется для:
Choices.js особенно удобен в проектах без React/Vue.
Пример:
<select id="category">
<option>Books</option>
<option>Movies</option>
</select>
<script>
new Choices('#category');
</script>
Это делает библиотеку популярной в:
Хотя Choices.js написан на чистом JavaScript, библиотека хорошо интегрируется с:
Чаще всего инициализация происходит после монтирования компонента.
Пример для React:
useEffect(() => {
const choices = new Choices(selectRef.current);
return () => {
choices.destroy();
};
}, []);
Choices.js генерирует события при взаимодействии.
Пример:
element.addEventListener('change', event => {
console.log(event.detail.value);
});
Поддерживаются события:
Библиотека учитывает требования доступности:
Это особенно важно для корпоративных интерфейсов.
Choices.js хранит:
Благодаря этому библиотека умеет:
Например:
Регистрации, CRM, ERP, админ-панели.
Интерфейсы поиска и фильтров.
Редакторы контента, блоги, CMS.
В простых формах Choices.js может оказаться ненужным.
Например:
<select>
<option>Yes</option>
<option>No</option>
</select>
Если:
то обычного <select> достаточно.
Choices.js работает быстро, однако при огромных массивах данных необходимо учитывать:
Для очень больших списков обычно используют:
После создания:
const choices = new Choices('#select');
появляется объект управления.
Через него можно:
choices.setChoices(...);
choices.clearChoices();
choices.removeActiveItems();
choices.disable();
choices.enable();
choices.destroy();
Choices.js решает конкретную задачу — улучшение элементов выбора.
Даже при использовании Choices.js проверка данных на сервере остаётся обязательной.
При отключённом JavaScript пользователь увидит стандартный HTML-элемент.
Choices.js поддерживает современные браузеры:
Поддержка старых браузеров ограничена и зависит от версии библиотеки.