Удаление опций

Работа с удалением данных в 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 не всегда автоматически очищает активные значения при удалении опции, поэтому требуется явная синхронизация.

Типовой алгоритм:

  1. Удаление опции из списка
  2. Проверка, была ли она выбрана
  3. Удаление из активных значений при необходимости
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);

Особенности поведения при удалении

При работе с удалением важно учитывать несколько технических особенностей:

  • удаление опции не всегда автоматически влияет на выбранные значения;
  • UI обновляется только после выполнения соответствующего метода экземпляра;
  • при массовых изменениях предпочтительно использовать 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);
}

Такой подход позволяет поддерживать консистентность между визуальным состоянием и внутренними данными компонента.