Событие removeItem относится к ключевым механизмам
взаимодействия с внутренним состоянием компонента выбора в Choices.js и
срабатывает в момент удаления выбранного элемента из списка. Оно
возникает как реакция на изменение коллекции выбранных значений,
независимо от того, было ли удаление инициировано пользователем через
интерфейс или программно через API экземпляра.
Удаление элемента в контексте Choices.js представляет собой операцию, при которой значение исключается из массива выбранных элементов, а также синхронизируется с визуальным состоянием компонента и скрытым input-элементом формы.
Событие removeItem вызывается сразу после успешного
удаления элемента из текущего состояния выбора. Оно фиксирует уже
изменённое состояние, то есть в момент его обработки элемент уже
отсутствует в списке выбранных значений.
Удаление может быть инициировано несколькими способами:
При срабатывании removeItem обработчик получает объект
события, содержащий контекст удалённого элемента и текущее состояние
компонента.
Типичная структура данных:
value — значение удалённого элемента;label — отображаемый текст элемента;id — внутренний идентификатор;customProperties — дополнительные свойства, если они
были заданы при инициализации;choice — ссылка на объект выбора внутри коллекции;passedElement — DOM-узел, связанный с удалённым
элементом;instance — ссылка на текущий экземпляр Choices.Эта структура позволяет не только фиксировать факт удаления, но и выполнять сложную логику синхронизации с внешними системами.
const element = document.querySelector('#example');
const choices = new Choices(element, {
removeItemButton: true
});
choices.passedElement.element.addEventListener('removeItem', (event) => {
const detail = event.detail;
console.log('Удалённое значение:', detail.value);
console.log('Отображаемый текст:', detail.label);
console.log('Вся информация:', detail);
});
В данном примере обработчик фиксирует каждое удаление элемента и получает полный контекст операции.
При удалении элемента в Choices.js происходит последовательная цепочка операций:
store.removeItem.Важно, что событие генерируется только после завершения всех внутренних изменений, что гарантирует консистентность данных при обработке.
Событие removeItem фиксирует конкретное удаление одного
элемента, тогда как change отражает общее изменение
состояния выбора.
Особенности различий:
removeItem — точечное событие, привязанное к одному
элементу;change — агрегированное состояние после любого
изменения (добавление, удаление, очистка);removeItem содержит данные удалённого элемента;change содержит полный актуальный список выбранных
значений.При построении сложной логики рекомендуется использовать оба события
совместно: removeItem для точечных действий и
change для синхронизации состояния.
Choices.js позволяет добавлять пользовательские метаданные к каждому элементу. Эти данные сохраняются и доступны в момент удаления.
Пример:
const choices = new Choices('#example', {
choices: [
{
value: '1',
label: 'Москва',
customProperties: {
country: 'RU',
code: 'MOW'
}
}
]
});
choices.passedElement.element.addEventListener('removeItem', (event) => {
const { customProperties } = event.detail;
console.log(customProperties.country);
});
Это особенно важно при интеграции с внешними API, где требуется сохранять контекст удалённого элемента.
Удаление через API также вызывает removeItem, если
используется метод удаления значений.
Пример:
choices.removeActiveItemsByValue('1');
или
choices.removeActiveItems();
В обоих случаях событие будет сгенерировано, что позволяет унифицировать обработку независимо от источника изменения.
В режиме множественного выбора событие removeItem может
срабатывать многократно при массовых изменениях. Например, при очистке
списка через API:
Хотя removeItem является синхронным событием, его часто
используют в асинхронных потоках:
При этом важно учитывать, что состояние компонента уже изменено к моменту вызова обработчика.
При активном поиске внутри Choices.js удаление элемента может влиять на:
Событие removeItem может использоваться как триггер для
повторного пересчёта результатов поиска, особенно при серверной
фильтрации.
При интеграции часто возникают следующие проблемы:
removeItem и
change;detail.value, что приводит к
ошибкам при нестандартных конфигурациях;Корректная архитектура предполагает разделение логики:
removeItem отвечает за факт удаления, внешние слои — за
бизнес-логику.
Событие removeItem является фундаментальным механизмом
контроля состояния в Choices.js, обеспечивая точечную реакцию на
изменение набора выбранных значений. Его использование позволяет строить
реактивные интерфейсы, где каждое изменение элемента становится
отдельным управляемым событием в системе.