В библиотеке SweetAlert можно легко создавать модальные окна с различными кнопками для взаимодействия с пользователем. Одним из часто встречающихся требований является возможность отключать кнопки в момент их отображения или во время взаимодействия с ними. Этот функционал полезен в различных случаях, например, когда необходимо предотвратить многократный клик на кнопку или заблокировать взаимодействие с пользователем до выполнения определённых действий.
disabledДля того чтобы отключить кнопку в модальном окне SweetAlert,
используется параметр disabled. Его можно применить как к
стандартной кнопке, так и к кнопке, которая задаётся вручную. Рассмотрим
базовый пример, где мы отключаем кнопку подтверждения:
Swal.fire({
title: 'Подтверждение',
text: 'Вы уверены?',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Да',
cancelButtonText: 'Нет',
confirmButtonDisabled: true, // Отключаем кнопку "Да"
cancelButtonDisabled: false // Кнопка "Нет" активна
});
В этом примере кнопка «Да» будет изначально отключена, а кнопка «Нет»
останется активной. Для отключения кнопки нужно просто установить
соответствующее значение в true для параметров
confirmButtonDisabled или
cancelButtonDisabled.
Иногда возникает необходимость в динамическом изменении состояния
кнопок в зависимости от действий пользователя или результата какого-либо
асинхронного процесса. Для этого можно использовать метод
Swal.getConfirmButton() или
Swal.getCancelButton(), чтобы изменить состояние кнопок
после их инициализации. Например:
Swal.fire({
title: 'Загрузка...',
text: 'Пожалуйста, подождите',
didOpen: () => {
Swal.showLoading(); // Показываем индикатор загрузки
},
allowOutsideClick: false, // Отключаем клик вне окна
showCancelButton: true,
confirmButtonText: 'Ок',
cancelButtonText: 'Отмена'
}).then((result) => {
if (result.dismiss === Swal.DismissReason.cancel) {
// Логика при отмене
}
});
// Пример динамического отключения кнопки
setTimeout(() => {
Swal.getConfirmButton().disabled = true; // Отключаем кнопку после 3 секунд
}, 3000);
В этом примере окно SweetAlert изначально отображает две кнопки — «Ок» и «Отмена». Через 3 секунды, после выполнения некоторой логики, кнопка «Ок» будет отключена. Такое поведение может быть полезно, например, когда нужно предотвратить повторное нажатие на кнопку до завершения какого-либо процесса.
Для динамического отключения кнопок часто используются асинхронные операции, например, HTTP-запросы или таймеры. В этом случае можно работать с кнопками после завершения операции. Например:
async function fetchData() {
const swal = await Swal.fire({
title: 'Загрузка данных...',
text: 'Пожалуйста, подождите.',
showCancelButton: true,
confirmButtonText: 'Ок',
cancelButtonText: 'Отмена',
allowOutsideClick: false
});
setTimeout(() => {
swal.getConfirmButton().disabled = false; // Включаем кнопку после завершения загрузки
swal.getCancelButton().disabled = false; // Включаем кнопку "Отмена"
}, 5000);
}
fetchData();
Здесь асинхронная функция fetchData() имитирует процесс
загрузки данных, после чего кнопки становятся активными. Можно также в
зависимости от результата запроса включать или отключать кнопки.
Если в модальном окне требуется блокировать кнопки не только во время взаимодействия с ним, но и в зависимости от состояния окна, например, при наличии ошибок в данных, то лучше использовать логические флаги. Такой подход поможет управлять состоянием кнопок в любой момент времени.
Пример использования логического флага для блокировки кнопок:
let isDataValid = false;
Swal.fire({
title: 'Ввод данных',
text: 'Пожалуйста, введите правильные данные.',
input: 'text',
inputPlaceholder: 'Введите текст',
confirmButtonText: 'Подтвердить',
cancelButtonText: 'Отмена',
showCancelButton: true,
confirmButtonDisabled: !isDataValid // Кнопка подтверждения отключена при неправильных данных
});
В этом примере кнопка подтверждения будет отключена до тех пор, пока
не будет установлено значение isDataValid в
true. Такой подход позволяет интегрировать проверку данных
непосредственно в логику отображения модального окна.
Параметры кнопок: SweetAlert предоставляет
несколько параметров для настройки состояния кнопок:
confirmButtonDisabled, cancelButtonDisabled, а
также методы для получения конкретных кнопок через
Swal.getConfirmButton() и
Swal.getCancelButton().
Доступность интерфейса: Не стоит забывать, что
отключение кнопок может повлиять на доступность интерфейса. Важно всегда
учитывать пользователей, использующих клавиатуру и экранные читалки. Для
улучшения доступности можно добавить атрибуты aria-disabled
для кнопок, чтобы экранные читалки правильно интерпретировали их
состояние.
Асинхронность: При работе с асинхронными операциями необходимо учитывать, что состояние кнопок должно обновляться только после завершения всех необходимых операций. Это особенно важно, когда интерфейс взаимодействует с сервером или сторонними API.
Предотвращение многократного клика: Если целью является предотвращение многократного клика на кнопку, то можно использовать как отключение кнопки после первого клика, так и обработку её состояния внутри обработчика событий.
Отключение кнопок в SweetAlert — это мощный инструмент для управления поведением модальных окон, который помогает повысить удобство и безопасность пользовательского взаимодействия.