Множественный выбор в Slim Select опирается на стандартный
HTML-элемент <select> с атрибутом
multiple. Именно этот атрибут определяет режим работы
компонента и позволяет выбирать несколько значений одновременно.
<select id="languages" multiple>
<option value="js">JavaScript</option>
<option value="ts">TypeScript</option>
<option value="py">Python</option>
<option value="go">Go</option>
</select>
Ключевой момент заключается в том, что Slim Select не требует отдельной конфигурации для активации multiple-режима — он автоматически определяется на основе DOM-элемента.
Инициализация выполняется через конструктор SlimSelect,
которому передаётся селектор исходного <select>.
const select = new SlimSelect({
select: '#languages'
});
При наличии атрибута multiple библиотека автоматически
переключается в режим множественного выбора, добавляя соответствующий
UI: теги выбранных элементов, возможность удаления каждого элемента и
мультиселект-логика управления состоянием.
После инициализации формируется следующий набор стандартных возможностей:
<select>.valueВнутренне значение элемента становится массивом строк,
соответствующих value выбранных
<option>.
Slim Select предоставляет набор конфигураций, которые особенно важны при работе с множественным выбором.
Позволяет задать текст-заполнитель, отображаемый при отсутствии выбранных значений.
new SlimSelect({
select: '#languages',
settings: {
placeholderText: 'Выберите языки'
}
});
Определяет, закрывается ли выпадающий список после выбора элемента.
Для multiple-select часто используется значение false,
чтобы ускорить выбор нескольких опций.
new SlimSelect({
select: '#languages',
settings: {
closeOnSelect: false
}
});
Включает или отключает поле поиска внутри списка опций. При большом количестве элементов эта настройка критична.
new SlimSelect({
select: '#languages',
settings: {
showSearch: true
}
});
Управляет возможностью повторного снятия выбора. В multiple-режиме обычно включено по умолчанию, но может быть явно задано.
new SlimSelect({
select: '#languages',
settings: {
allowDeselect: true
}
});
Slim Select позволяет задавать выбранные значения после инициализации
через метод setSelected.
const select = new SlimSelect({
select: '#languages'
});
select.setSelected(['js', 'py']);
Передаваемый массив должен содержать значения value
соответствующих <option>.
Для получения текущего состояния используется свойство
value DOM-элемента <select>.
const element = document.querySelector('#languages');
console.log(element.value);
В режиме multiple возвращается массив выбранных значений:
["js", "py"]
Slim Select может инициализироваться на элементе, который создаётся динамически, при условии, что он уже добавлен в DOM.
const select = document.createElement('select');
select.id = 'frameworks';
select.multiple = true;
document.body.appendChild(select);
new SlimSelect({
select: '#frameworks'
});
При стандартной HTML-разметке можно заранее указать выбранные
элементы через selected.
<select id="languages" multiple>
<option value="js" selected>JavaScript</option>
<option value="ts">TypeScript</option>
<option value="py" selected>Python</option>
</select>
После инициализации Slim Select автоматически подхватывает состояние DOM без дополнительной конфигурации.
new SlimSelect({
select: '#languages'
});
Multiple select часто используется в сценариях с большим списком данных. В таких случаях важно учитывать производительность и удобство интерфейса.
Рекомендуемые настройки:
new SlimSelect({
select: '#languages',
settings: {
showSearch: true,
closeOnSelect: false,
placeholderText: 'Поиск и выбор языков'
}
});
Поиск внутри списка снижает нагрузку на визуальное восприятие и ускоряет выбор.
Slim Select поддерживает полное обновление данных через метод
setData. Это особенно полезно при динамической загрузке
списка.
const select = new SlimSelect({
select: '#languages'
});
select.setData([
{ text: 'JavaScript', value: 'js' },
{ text: 'TypeScript', value: 'ts' },
{ text: 'Python', value: 'py' }
]);
После обновления данные отображаются как новые опции, при этом multiple-логика сохраняется.
Для сброса множественного выбора используется метод
setSelected с пустым массивом.
select.setSelected([]);
Это приводит к очистке всех выбранных элементов и возврату к начальному состоянию.
При работе в multiple-режиме Slim Select управляет состоянием через синхронизацию:
<select multiple> — источник истиныЛюбое программное изменение через API синхронизирует все три уровня.
Каждый выбранный элемент в multiple-режиме отображается как отдельный UI-компонент с возможностью удаления. Удаление приводит к:
<option> из состояния
выбораЧасто встречающиеся проблемы:
multiple в
<select>setSelectedКорректная работа требует соблюдения синхронизации DOM и состояния библиотеки.
При повторной инициализации важно избегать наложения экземпляров. Обычно используется сохранение ссылки на экземпляр и его последующее управление.
let select = new SlimSelect({
select: '#languages'
});
// при необходимости пересоздания логики
select.destroy();
select = new SlimSelect({
select: '#languages'
});
Такой подход предотвращает утечки состояния и дублирование UI.