Экземпляр Choices.js после инициализации проходит несколько состояний, которые определяют его работоспособность и доступность методов. Базовая проверка состояния начинается с факта существования экземпляра и корректного завершения инициализации.
Одним из косвенных индикаторов готовности выступает наличие внутреннего хранилища данных и привязанных DOM-элементов:
passedElement — исходного элемента
<select> или <input>;store — внутреннего состояния данных;destroy().При разрушении экземпляра (destroy()) дальнейшие
обращения к методам становятся некорректными, а DOM-обвязка Choices
удаляется.
Choices.js поддерживает два основных режима:
isSelectOne);isSelectMultiple).Проверка режима используется для корректной обработки логики состояния:
const isSingle = choices.isSelectOne;
const isMultiple = choices.isSelectMultiple;
Эти флаги определяют:
Экземпляр может быть активным или отключённым. Это состояние влияет на возможность взаимодействия пользователя с компонентом.
Основные проверки:
choices.isDisabled
и методы управления:
choices.disable();
choices.enable();
Состояние disabled синхронизируется с исходным
DOM-элементом и отражается на UI-компоненте. При отключении:
Дополнительно может учитываться состояние фокуса:
choices._isFocussed
Хотя это внутреннее поле, оно отражает факт активности интерфейса в данный момент.
Одно из ключевых состояний — раскрыт ли список выбора. Оно влияет на обработку клавиатурной навигации и отображение выпадающего меню.
choices.isOpen
При открытом состоянии:
При закрытии:
Одной из наиболее частых проверок является наличие выбранных элементов.
const value = choices.getValue();
Поведение зависит от режима:
Проверка наличия значений:
const hasValue = Array.isArray(value)
? value.length > 0
: value !== undefined && value !== null;
Внутренне Choices хранит активные элементы в структуре:
choices._store.activeItems
Эта коллекция отражает текущее состояние выбранных значений и синхронизируется с UI.
Состояние списка доступных опций определяется через внутреннее хранилище:
choices._store.choices
Пустой список может означать:
clearStore();Метод очистки:
choices.clearStore();
После вызова список вариантов становится пустым, но экземпляр остаётся активным.
При включённом поиске состояние экземпляра зависит от текущего запроса пользователя.
Внутренние признаки:
choices._store.choices;Подсветка управляется через:
choices._highlightChoice
Это состояние определяет, какой элемент будет выбран при нажатии Enter.
В режиме множественного выбора важным индикатором является список активных элементов:
choices._store.activeItems
Проверки включают:
Пример проверки переполнения:
const isFull = choices.config.maxItemCount > 0 &&
choices._store.activeItems.length >= choices.config.maxItemCount;
Состояние экземпляра должно быть синхронизировано с исходным элементом формы.
Ключевые признаки корректной синхронизации:
<select> совпадает с внутренним
store;.choices__item соответствуют
activeItems;Для получения актуального значения из DOM:
choices.passedElement.element.value
Choices.js не предоставляет прямого публичного флага
initialized, однако состояние можно определить
косвенно:
store;.choices контейнера.После вызова:
choices.destroy();
экземпляр теряет внутренние ссылки, и любые проверки состояния должны учитывать факт уничтожения. Типичные признаки:
passedElement;.choices;Состояние экземпляра также отслеживается через события жизненного цикла:
showDropdown — список открыт;hideDropdown — список закрыт;addItem — добавлено значение;removeItem — удалено значение;change — изменено состояние выбора;search — активирован поиск.Использование событий позволяет фиксировать переходы между состояниями без прямого доступа к внутренним полям:
element.addEventListener('change', (event) => {
const currentValue = event.detail.value;
});
В практических сценариях проверка состояния объединяет несколько аспектов:
isDisabled);isOpen);getValue);_store.choices);isSelectOne,
isSelectMultiple);Такой подход позволяет определить текущее поведение компонента и корректно реагировать на изменения без прямого вмешательства во внутреннюю реализацию библиотеки.