Библиотека Choices.js реализует кастомизированную работу с
<select> и <input> элементами,
заменяя стандартное поведение нативных контролов расширенным API. Одним
из ключевых механизмов взаимодействия с состоянием компонента выступает
событие change, фиксирующее изменение выбранных
значений.
Событие change возникает при изменении текущего значения
компонента выбора. Под изменением понимаются следующие действия:
Событие отражает актуальное состояние выбранных данных после завершения операции изменения.
Внутри Choices.js событие change может быть инициировано
несколькими механизмами:
Пользовательское взаимодействие
addItems).Программный API
setChoiceByValue();setValue();removeActiveItems();clearStore().Внутренние обновления состояния
Событие change связано с DOM-элементом, который был
преобразован библиотекой. Подписка осуществляется через стандартный
механизм событий DOM.
const element = document.querySelector('#select');
const choices = new Choices(element);
element.addEventListener('change', (event) => {
console.log(event.target.value);
});
В ряде конфигураций библиотека может триггерить событие после каждого изменения внутреннего store, приводя DOM-значение в соответствие с состоянием экземпляра.
Содержимое event.target.value зависит от режима
работы:
{
value: "2"
}
Значение строки или числа соответствует выбранной опции.
{
value: "2,5,8"
}
Или массивная логика может быть представлена строкой с разделителем
либо синхронизацией через selectedOptions.
В стандартном HTML событие change срабатывает при потере
фокуса или подтверждении выбора. В Choices.js поведение
модифицируется:
Таким образом, change становится отражением внутреннего
состояния компонента, а не только DOM-значения.
При изменении значения через API библиотека синхронизирует состояние
и инициирует событие change.
choices.setChoiceByValue('3');
После выполнения:
change.Дополнительно возможно управление поведением через конфигурацию, уменьшающую количество событий при массовых обновлениях.
В режиме removeItem и addItem событие
change становится особенно важным, так как отражает каждое
изменение состава выбранных элементов.
Пример поведения:
const choices = new Choices('#select', {
removeItemButton: true,
maxItemCount: 5
});
choices.setValue([{ value: '1' }, { value: '2' }]);
Каждое добавление или удаление приводит к последовательным вызовам
change, фиксируя актуальное состояние списка.
Внутренне библиотека синхронизирует изменения через слой abstraction над DOM. Поэтому событие может использоваться как единая точка контроля состояния:
При включении режима создания новых элементов
(addItems: true) событие change фиксирует
добавление пользовательских значений.
const choices = new Choices('#select', {
addItems: true,
duplicateItemsAllowed: false
});
При вводе нового значения:
change.При активной строке поиска изменение выбранных элементов также может
приводить к change, особенно при автоматическом выборе
первого совпадения или подтверждении ввода.
Фильтрация списка не всегда вызывает событие, однако подтверждение выбора после фильтрации приводит к его генерации.
При последовательных изменениях состояния возможно возникновение
цепочек событий change. В сложных сценариях:
событие может срабатывать многократно, отражая каждую промежуточную стадию.
Событие change часто используется как точка
интеграции:
Поведение остаётся детерминированным: каждое изменение store приводит к актуализации DOM и генерации события.