Библиотека Choices.js строит работу вокруг внутреннего состояния
компонента, которое синхронизируется с исходным элементом формы
(select, input) и объектной моделью выбранных
элементов. Любое извлечение информации опирается на экземпляр
Choices, созданный при инициализации.
Ключевая особенность архитектуры — разделение данных на три уровня:
Методы получения информации позволяют работать с каждым уровнем отдельно.
getValue()Основной метод извлечения выбранного значения —
getValue().
Он возвращает текущее состояние выбора в зависимости от режима компонента:
Использование:
const value = choices.getValue();
Поведение зависит от конфигурации:
singleSelect → возвращается одно значениеmultiple → возвращается массив значенийМетод работает с уже нормализованными данными Choices.js, а не с DOM напрямую.
getValue(true)Передача булевого параметра позволяет получить расширенную информацию о выбранных элементах.
const selected = choices.getValue(true);
При true возвращается массив объектов выбора, где каждый
элемент содержит метаданные:
value — значениеlabel — отображаемый текстid — внутренний идентификаторdisabled — состояние доступностиПример структуры:
[
{
value: "ru",
label: "Русский",
id: 1,
selected: true,
disabled: false
}
]
Такой формат используется для:
При необходимости получить минимальный набор данных используется режим без полного раскрытия объектов.
const values = choices.getValue(false);
Возвращается упрощённая форма:
Этот режим полезен для:
Choices.js хранит выбранные элементы не только как значения, но и как
внутренние объекты состояния. Через getValue(true) можно
работать с ними как с полноценными сущностями.
Это позволяет:
Пример использования:
const selectedItems = choices.getValue(true);
selectedItems.forEach(item => {
console.log(item.value, item.label);
});
Для доступа к полному списку опций используется доступ к внутреннему набору choices.
В зависимости от версии API это может быть:
choices._store.choices
или публичный метод:
choices.getChoices();
Возвращаемая структура включает:
disabledПример результата:
[
{ value: "ru", label: "Русский", disabled: false },
{ value: "en", label: "English", disabled: false }
]
Этот механизм используется для:
Важно разделять:
Методы получения информации работают в двух направлениях:
| Задача | Метод |
|---|---|
| Получить выбранные значения | getValue() |
| Получить выбранные объекты | getValue(true) |
| Получить список всех опций | getChoices() или _store.choices |
При singleSelect поведение упрощается:
const value = choices.getValue();
Возвращается:
undefined, если выбор отсутствуетОбъектная версия:
const item = choices.getValue(true);
Возвращает:
{
value: "ru",
label: "Русский",
id: 1
}
В режиме множественного выбора все методы возвращают массивы:
const values = choices.getValue(); // ["ru", "en"]
const objects = choices.getValue(true);
При этом порядок элементов соответствует порядку выбора, а не порядку в исходном списке.
Несмотря на наличие внутреннего состояния, Choices.js синхронизирует его с оригинальным элементом формы.
Получение через DOM:
const raw = document.querySelector('select').value;
Однако это значение может быть менее информативным, чем
getValue(), так как не включает дополнительные данные и не
отражает внутреннюю структуру компонента.
Если элементы добавляются или удаляются во время выполнения, методы получения информации автоматически отражают изменения.
Пример сценария:
choices.setChoiceByValue('ru');
console.log(choices.getValue(true));
После динамического обновления списка:
choices.setChoices([
{ value: 'de', label: 'Deutsch' }
], 'value', 'label', true);
getValue() будет возвращать актуальное состояние без
дополнительной синхронизации.
Часто требуется сохранить текущее состояние компонента:
const state = {
value: choices.getValue(),
full: choices.getValue(true)
};
Такой подход используется при:
Выбранные элементы могут сохраняться даже если они стали
disabled. При извлечении данных:
getValue(true) возвращает их с флагом
disabledgetValue() возвращает их значения без различийЭто важно при динамическом управлении доступностью опций.
Choices.js предоставляет три основных слоя доступа:
getValue()getValue(true)getChoices()Эти методы формируют единую систему извлечения данных, позволяющую работать как с минимальными значениями, так и с полным объектным представлением состояния компонента.