Метод disable в Slim Select используется для перевода
элемента выбора в неактивное состояние. В этом режиме пользовательский
интерфейс становится недоступным для взаимодействия: открытие списка,
выбор значений и изменение текущего состояния блокируются. При этом
внутренняя модель данных сохраняется, а текущее выбранное значение не
сбрасывается.
С точки зрения архитектуры Slim Select, блокировка реализуется на уровне DOM-обёртки и логики обработчиков событий, что исключает возможность изменения состояния через пользовательские действия, но сохраняет программный доступ к API.
Наиболее распространённый сценарий применения disable —
полное отключение экземпляра селекта.
const select = new SlimSelect({
select: '#example'
});
select.disable();
После вызова метода:
Поведение синхронизируется с нативным атрибутом disabled
у исходного <select>.
Метод disable всегда используется в паре с обратной
операцией enable, обеспечивающей возврат
интерактивности.
select.enable();
После вызова:
Внутренне происходит синхронизация состояния Slim Select с DOM-элементом, включая обновление атрибутов и повторную активацию event listener-ов.
Типичный сценарий использования — управление доступностью селекта на основе внешних условий: загрузка данных, выбор других полей формы, права пользователя.
const select = new SlimSelect({ select: '#city' });
function toggleAvailability(isAllowed) {
if (isAllowed) {
select.enable();
} else {
select.disable();
}
}
При этом состояние может изменяться многократно без пересоздания экземпляра, что снижает нагрузку на DOM и предотвращает потерю выбранных значений.
<select>Slim Select не изолируется от оригинального элемента формы. Вызов
disable влияет и на DOM-узел:
<select id="example">
<option value="1">A</option>
<option value="2">B</option>
</select>
const select = new SlimSelect({ select: '#example' });
select.disable();
Результат:
disabled на
<select>В режиме multiple: true метод disable
блокирует изменение набора выбранных значений, но уже выбранные элементы
остаются отображёнными.
const select = new SlimSelect({
select: '#multi',
multiple: true
});
select.disable();
Характер поведения:
Slim Select поддерживает отключение отдельных опций на уровне данных.
Хотя это не прямое поведение метода disable, логика тесно
связана с общей системой блокировок.
Пример структуры данных:
select.setData([
{ text: 'Option 1', value: '1' },
{ text: 'Option 2', value: '2', disabled: true }
]);
В этом случае:
disable применяется ко всему компонентуdisabled работает на уровне конкретных
элементовМетод является идемпотентным: многократный вызов
disable() не приводит к накоплению побочных эффектов.
select.disable();
select.disable();
select.disable();
Состояние остаётся стабильным:
Часто disable используется во время асинхронных
операций, например загрузки данных.
select.disable();
fetch('/api/options')
.then(res => res.json())
.then(data => {
select.setData(data);
select.enable();
});
Логика поведения:
После вызова disable большинство пользовательских
событий, связанных с взаимодействием, перестают генерироваться:
openchange (через UI)search (внутренний поиск)При этом программные изменения состояния могут продолжать генерировать события, если они инициированы напрямую через API.
Slim Select автоматически применяет CSS-классы, отражающие неактивное состояние компонента. Это позволяет управлять визуальной индикацией без дополнительной логики.
Типичные изменения:
not-allowedПри необходимости стили могут быть переопределены через пользовательские CSS-правила, ориентированные на классы контейнера Slim Select.
При использовании в <form> элементе поведение
disable влияет на участие поля в отправке данных.
<form>
<select id="country"></select>
</form>
select.disable();
Наблюдаемая логика:
Типичная архитектура интерфейсов использует переключение состояния селектов в зависимости от бизнес-логики:
regionSelect.onChange(() => {
citySelect.disable();
loadCities().then(() => citySelect.enable());
});
Метод disable не заменяет и не конфликтует с
уничтожением экземпляра через destroy. После вызова
destroy управление состоянием через disable
становится недействительным, так как компонент более не связан с
DOM.
Функциональность метода формируется вокруг трёх базовых принципов:
<select>enable без пересоздания
экземпляра