Очистка выбранных значений в Choices.js реализуется несколькими способами, каждый из которых затрагивает разные уровни состояния компонента: выбранные элементы, отображаемые теги, внутренний стор и состояние поиска. В зависимости от режима работы (single select или multi select), поведения плагина и источника данных (локальные или удалённые опции) применяется различная стратегия сброса.
Наиболее прямой способ очистки текущего выбора — использование метода удаления активных элементов. В Choices.js за выбранные значения отвечает коллекция active items, и её можно полностью очистить:
const choices = new Choices('#example', {
removeItemButton: true,
shouldSort: false,
});
Очистка выбора:
choices.removeActiveItems();
Метод удаляет все выбранные элементы, переводя компонент в исходное состояние без выбранных значений. При этом список доступных опций остаётся неизменным.
Важный момент заключается в том, что метод работает как для одиночного выбора, так и для множественного режима, однако в single select он фактически сбрасывает текущее значение на пустое.
Альтернативный способ очистки основывается на явной установке пустого массива значений. Choices.js синхронизирует внутреннее состояние при изменении через программный интерфейс:
choices.setValue([]);
В случае одиночного выбора допустимо использование
null:
choices.setValue(null);
Этот способ особенно полезен, когда состояние компонента управляется извне (например, через React, Vue или собственный state manager), так как позволяет унифицировать логику обновления значений.
Метод clearStore() используется для более радикального
сброса состояния компонента. Он очищает внутреннее хранилище, включая
выбранные элементы, список опций и данные поиска:
choices.clearStore();
После вызова компонент фактически возвращается в состояние, близкое к первоначальной инициализации. Это не просто удаление выбранных значений, а полное очищение runtime-хранилища.
Такой подход применяется в ситуациях, когда необходимо полностью перезагрузить данные, например:
Иногда требуется сохранить список доступных опций, но убрать только текущий выбор. В этом случае используются методы, работающие исключительно с active items:
choices.removeActiveItems();
или комбинированная очистка входного состояния:
choices.input.clear();
choices.removeActiveItems();
Вторая строка дополнительно сбрасывает строку поиска, если она активна.
Choices.js хранит отдельно состояние выбранных значений и состояние поискового ввода. При очистке выбора поле поиска может оставаться заполненным, особенно в searchable режимах.
Полный сброс пользовательского состояния:
choices.removeActiveItems();
choices.input.clear();
Если используется кастомная фильтрация или async loading, дополнительно может потребоваться сброс результатов поиска:
choices.clearChoices();
choices.removeActiveItems();
choices.input.clear();
При использовании динамической загрузки данных (AJAX / async list), очистка часто требует обновления как выбранных элементов, так и списка опций:
choices.setChoices([], 'value', 'label', true);
choices.removeActiveItems();
Четвёртый параметр true полностью заменяет текущие опции
новым набором, что фактически очищает список.
При очистке выбранных значений Choices.js генерирует набор событий, которые могут использоваться для синхронизации состояния:
removeItem — при удалении каждого элементаchange — при изменении значенияclear (в зависимости от версии и реализации) — при
полном сбросеПример обработки:
choices.passedElement.element.addEventListener('change', (event) => {
console.log(event.detail.value);
});
При массовой очистке события могут вызываться последовательно для каждого удалённого элемента, что важно учитывать при работе с тяжёлыми обработчиками.
В некоторых архитектурах применяется полный пересоздание экземпляра:
choices.destroy();
const newChoices = new Choices('#example', {
removeItemButton: true,
});
Такой подход гарантирует полный сброс состояния, включая DOM-структуру, обработчики событий и внутренние кэши. Он используется при сложных сценариях обновления интерфейса, когда точечная очистка недостаточна.
В режиме одиночного выбора очистка имеет специфическое поведение:
Пример:
choices.setValue(null);
или
choices.removeActiveItems();
Оба варианта приводят к эквивалентному состоянию, однако
setValue(null) более явно выражает семантику отсутствия
значения.
Если компонент находится в состоянии disabled, очистка
всё равно возможна через API, но визуальное обновление может быть
отложено до снятия блокировки:
choices.enable();
choices.removeActiveItems();
или
choices.setValue([]);
choices.disable();
Выбор последовательности зависит от того, требуется ли обновление UI в момент очистки или после неё.
При очистке важно учитывать поведение placeholder. Если он задан в конфигурации, он автоматически становится активным после сброса выбора:
const choices = new Choices('#example', {
placeholder: true,
placeholderValue: 'Выберите значение',
});
После вызова очистки:
choices.removeActiveItems();
компонент возвращается к отображению placeholder без дополнительной логики.
При интеграции с внешними состояниями (Redux, MobX, Vuex, React state) очистка Choices.js обычно синхронизируется с обновлением внешнего значения:
choices.removeActiveItems();
externalState.value = [];
Несогласованность этих двух уровней состояния приводит к повторному восстановлению выбора при следующем рендере, поэтому очистка должна выполняться синхронно с обновлением модели данных.