Работа с удалением данных в Choices.js строится вокруг двух независимых сущностей: списка доступных опций и выбранных пользователем значений. Эти сущности хранятся отдельно, поэтому операции удаления всегда зависят от того, что именно требуется изменить — состояние выбора или содержимое источника данных.
Выбранные элементы представляют собой активные элементы инпута, которые пользователь уже добавил. Для их удаления используется метод очистки активного состояния.
const choices = new Choices('#select');
Удаление всех выбранных значений:
choices.removeActiveItems();
Этот метод полностью очищает текущий выбор, не затрагивая список доступных опций. Он эквивалентен ручному снятию всех выбранных тегов в интерфейсе мультиселекта.
Если требуется удалить только конкретное выбранное значение, применяется фильтрация по значению:
choices.removeActiveItemsByValue('value_1');
В результате из активного списка исчезает только указанный элемент, остальные выбранные значения сохраняются.
При необходимости массового удаления выбранных значений используется последовательный вызов или передача массива значений через цикл:
['value_1', 'value_2', 'value_3'].forEach(value => {
choices.removeActiveItemsByValue(value);
});
Такой подход применяется при синхронизации состояния с внешними данными, когда требуется привести выбор к новому набору допустимых значений.
Удаление элементов из списка доступных вариантов затрагивает сам источник данных, который отображается в выпадающем меню.
Для удаления конкретной опции используется метод:
choices.removeChoiceByValue('value_1');
После выполнения операции элемент исчезает из списка и становится недоступным для выбора. Если он уже был выбран, его следует дополнительно удалить из активных значений.
Типичный сценарий полной синхронизации:
choices.removeChoiceByValue('value_1');
choices.removeActiveItemsByValue('value_1');
В ситуациях, когда требуется полностью заменить набор данных, используется очистка всех опций:
choices.clearChoices();
После выполнения метода список доступных значений становится пустым, но сам экземпляр Choices продолжает работать и может быть повторно заполнен новыми данными.
Часто используется в связке с динамической загрузкой:
choices.clearChoices();
choices.setChoices([
{ value: 'a', label: 'Option A' },
{ value: 'b', label: 'Option B' }
], 'value', 'label', true);
При удалении элементов важно учитывать состояние выбранных данных. Choices.js не всегда автоматически очищает активные значения при удалении опции, поэтому требуется явная синхронизация.
Типовой алгоритм:
const value = 'value_1';
choices.removeChoiceByValue(value);
choices.removeActiveItemsByValue(value);
При сложных сценариях (например, фильтрация по ролям пользователя или зависимые селекты) эффективнее не удалять элементы по одному, а пересоздавать список целиком.
const filtered = allOptions.filter(item => item.value !== 'value_1');
choices.clearChoices();
choices.setChoices(filtered, 'value', 'label', true);
Такой подход снижает риск несогласованности состояния и упрощает управление данными.
При использовании Choices.js вместе с API данные часто обновляются асинхронно. В таких случаях удаление опций становится частью процесса синхронизации состояния.
Пример обновления после запроса:
fetch('/api/options')
.then(res => res.json())
.then(data => {
choices.clearChoices();
choices.setChoices(data, 'value', 'label', true);
});
Если требуется исключить определённые значения:
const excluded = ['value_1', 'value_2'];
const filtered = data.filter(item => !excluded.includes(item.value));
choices.clearChoices();
choices.setChoices(filtered, 'value', 'label', true);
При работе с удалением важно учитывать несколько технических особенностей:
clearChoices с последующим setChoices;Если Choices.js используется как поле с возможностью добавления пользовательских значений, удаление таких элементов работает аналогично стандартным опциям:
choices.removeActiveItemsByValue('custom_value');
При этом важно учитывать, что пользовательские значения могут не присутствовать в исходном списке, но всё равно находятся в активных элементах.
На практике удаление часто комбинируется с обновлением интерфейса и валидацией состояния:
function removeValue(value) {
choices.removeChoiceByValue(value);
choices.removeActiveItemsByValue(value);
const current = choices.getValue(true);
console.log(current);
}
Такой подход позволяет поддерживать консистентность между визуальным состоянием и внутренними данными компонента.