Очистка выбора в Choices.js затрагивает несколько уровней состояния компонента: активные элементы, внутренний кэш выбранных значений, состояние поискового поля и визуальные представления тегов. В зависимости от сценария требуется либо полное сбрасывание состояния, либо точечное удаление выбранных элементов.
Внутренне Choices.js хранит данные о выбранных значениях отдельно от исходного списка опций. Это означает, что простое изменение DOM-элементов не приводит к корректному обновлению состояния компонента. Очистка должна выполняться через публичные методы API.
Метод clearStore() используется для полного сброса
состояния экземпляра Choices. Он удаляет:
После вызова компонент возвращается к состоянию, близкому к первоначальной инициализации.
const choices = new Choices('#select', {
removeItemButton: true
});
// Добавление выбора
choices.setChoiceByValue('value1');
// Полная очистка
choices.clearStore();
Особенность clearStore() заключается в том, что он
затрагивает не только выбор пользователя, но и сам список доступных
опций, если они были добавлены динамически. В сценариях, где список
опций должен сохраняться, этот метод использовать нельзя.
В большинстве случаев требуется удалить только текущий выбор, сохранив список опций. Для этого используются методы, работающие с активными элементами.
Метод removeActiveItems() удаляет все выбранные значения
без влияния на список доступных опций.
const choices = new Choices('#select', {
removeItemButton: true
});
choices.setChoiceByValue(['a', 'b', 'c']);
// Удаление всех выбранных значений
choices.removeActiveItems();
После вызова компонент остаётся функциональным, а пользователь может снова выбирать значения из выпадающего списка.
Альтернативный подход заключается в установке пустого массива
значений через setValue().
choices.setValue([]);
Этот метод работает как декларативное управление состоянием: компоненту явно задаётся новое состояние без выбранных элементов. Внутренне Choices.js синхронизирует UI и данные модели.
Особенности:
Если требуется удалить отдельные элементы выбора, используется метод
removeItem(). Он принимает объект или значение
элемента.
choices.removeItem(choices.getValue(true)[0]);
В более стабильных сценариях используется удаление по значению:
choices.removeItemByValue('value1');
Этот подход применяется при реализации интерфейсов, где пользователь может удалять элементы по одному, а не сбрасывать весь выбор.
Метод setChoiceByValue() может использоваться не только
для установки значений, но и для очистки.
choices.setChoiceByValue([]);
Такой способ фактически переопределяет текущий выбор пустым массивом.
Поведение аналогично setValue([]), однако в некоторых
версиях Choices.js различие заключается в том, как обрабатываются
события и синхронизация UI.
Помимо выбранных элементов, компонент содержит поле поиска, которое
также может сохранять введённый текст. Для этого используется метод
clearInput().
choices.clearInput();
Этот метод:
В интерфейсах с динамической фильтрацией этот метод важен для предотвращения «залипания» фильтра после программного изменения выбора.
Choices.js различает активные (selected) и выделенные (highlighted) элементы. При работе с клавиатурой пользователь может выделить элемент без его окончательного выбора.
Для очистки такого состояния применяется:
choices.removeHighlightedItems();
Этот метод полезен при обработке событий клавиатуры, особенно при кастомной логике навигации по списку.
В сложных интерфейсах требуется одновременно очистить:
Типичный сценарий сброса выглядит следующим образом:
choices.removeActiveItems();
choices.removeHighlightedItems();
choices.clearInput();
Такая комбинация оставляет компонент в состоянии, максимально близком к «чистому», без удаления опций.
При работе с динамическими источниками данных очистка часто выполняется перед загрузкой нового набора опций.
async function reloadChoices() {
choices.removeActiveItems();
choices.clearInput();
const data = await fetch('/api/options').then(r => r.json());
choices.setChoices(data, 'value', 'label', true);
}
Параметр true в setChoices может заменять
существующие опции. В этом случае предварительная очистка предотвращает
конфликт старых выбранных значений с новым набором данных.
Поведение методов очистки не зависит от режима, однако различается результат:
removeActiveItems() или setValue([])
возвращает пустое состояние;choices.removeActiveItems();
choices.setValue([]);
При программной очистке Choices.js генерирует события, которые позволяют отслеживать изменения состояния:
change — изменение значения;removeItem — удаление элемента;clear (в зависимости от версии и реализации) — полная
очистка.Пример обработки:
const element = document.querySelector('#select');
element.addEventListener('change', (e) => {
console.log('Текущее значение:', e.detail.value);
});
При массовой очистке важно учитывать, что события могут вызываться несколько раз в зависимости от количества удаляемых элементов.
В крайних случаях применяется полное уничтожение экземпляра с последующей инициализацией:
choices.destroy();
const newChoices = new Choices('#select', {
removeItemButton: true
});
Этот подход используется при:
Недостатком является потеря всех текущих настроек и необходимость повторной конфигурации.
Неправильная очистка часто связана с попыткой прямого изменения DOM:
document.querySelector('.choices__item').remove();
Такой подход нарушает синхронизацию между UI и внутренним состоянием библиотеки. В результате:
Корректная очистка всегда выполняется через API Choices.js.
При использовании Choices.js внутри форм очистка должна учитывать
состояние родительского <form>.
form.addEventListener('reset', () => {
choices.removeActiveItems();
choices.clearInput();
});
Стандартное событие reset не всегда синхронизирует
кастомные компоненты, поэтому требуется ручной вызов методов
очистки.
После удаления всех значений компонент возвращает placeholder в исходное состояние. Это зависит от конфигурации:
placeholderValue — текст подсказки;searchEnabled — влияет на видимость input;removeItemButton — влияет на UX удаления.При корректной очистке placeholder становится единственным видимым состоянием поля выбора.