Библиотека SweetAlert позволяет не только создавать всплывающие уведомления, но и значительно улучшать взаимодействие с пользователем. Одним из популярных и мощных инструментов является создание многошаговых форм, которые позволяют собирать информацию от пользователя в несколько этапов. Такой подход удобен, когда нужно разбить длинные или сложные формы на более простые части, улучшая восприятие и пользовательский опыт.
Многошаговые формы — это формы, разделённые на несколько этапов. Каждый шаг представляет собой отдельное окно, в котором отображается часть данных или действий, необходимых для завершения процесса. В SweetAlert создание таких форм осуществляется с помощью механизма вложенных диалоговых окон (модальных окон), где каждый шаг является отдельным шагом в общей последовательности.
Для реализации многошаговой формы в SweetAlert необходимо использовать конфигурацию для отображения нескольких окон подряд, сохраняя данные, введённые пользователем на каждом шаге. Чтобы обеспечить такой функционал, требуется понимать, как работать с внутренними состояниями и передачей данных между шагами.
Для начала создадим пример формы с двумя шагами: на первом собираем имя пользователя, на втором — его возраст.
Swal.fire({
title: 'Шаг 1: Введите ваше имя',
input: 'text',
inputLabel: 'Ваше имя',
inputPlaceholder: 'Введите имя',
showCancelButton: true,
confirmButtonText: 'Далее',
preConfirm: (name) => {
if (!name) {
Swal.showValidationMessage('Введите имя!');
}
return name;
}
}).then((result) => {
if (result.isConfirmed) {
const userName = result.value;
// Шаг 2: Сбор возраста
Swal.fire({
title: 'Шаг 2: Введите ваш возраст',
input: 'number',
inputLabel: 'Ваш возраст',
inputPlaceholder: 'Введите возраст',
showCancelButton: true,
confirmButtonText: 'Завершить',
preConfirm: (age) => {
if (!age) {
Swal.showValidationMessage('Введите возраст!');
}
return { name: userName, age: age };
}
}).then((result) => {
if (result.isConfirmed) {
const userData = result.value;
Swal.fire(`Спасибо, ${userData.name}! Ваш возраст: ${userData.age}`);
}
});
}
});
Этот пример демонстрирует процесс создания двух шагов. На первом шаге мы собираем имя пользователя, а на втором — его возраст. После завершения всех шагов выводится благодарственное сообщение с собранной информацией.
Для более сложных многошаговых форм необходимо добавлять дополнительные шаги и обработку ошибок на каждом из них. Важно, чтобы пользователь не мог перейти на следующий шаг без корректного ввода данных, что обеспечивает валидация на каждом шаге.
Пример с тремя шагами:
let step1Data = null;
let step2Data = null;
Swal.fire({
title: 'Шаг 1: Введите имя',
input: 'text',
inputLabel: 'Ваше имя',
inputPlaceholder: 'Введите имя',
showCancelButton: true,
confirmButtonText: 'Далее',
preConfirm: (name) => {
if (!name) {
Swal.showValidationMessage('Имя обязательно!');
}
return name;
}
}).then((result) => {
if (result.isConfirmed) {
step1Data = result.value;
Swal.fire({
title: 'Шаг 2: Введите возраст',
input: 'number',
inputLabel: 'Ваш возраст',
inputPlaceholder: 'Введите возраст',
showCancelButton: true,
confirmButtonText: 'Далее',
preConfirm: (age) => {
if (!age || age < 18) {
Swal.showValidationMessage('Возраст должен быть больше 18!');
}
return age;
}
}).then((result) => {
if (result.isConfirmed) {
step2Data = result.value;
Swal.fire({
title: 'Шаг 3: Подтверждение',
text: `Ваше имя: ${step1Data}\nВаш возраст: ${step2Data}`,
confirmButtonText: 'Подтвердить',
showCancelButton: true
}).then((result) => {
if (result.isConfirmed) {
Swal.fire('Форма отправлена!', '', 'success');
}
});
}
});
}
});
В этом примере на каждом шаге происходит валидация ввода, и переход к следующему шагу невозможен без корректных данных. Так можно обрабатывать несколько шагов, и они последовательно переходят друг в друга.
При создании многошаговых форм важно учитывать несколько моментов:
preConfirm, которая проверяет корректность введённых
данных.Для более сложных форм с большим количеством шагов можно использовать
цепочку вызовов Swal.fire или воспользоваться
Promise-цепочками для более гибкой работы с состоянием. Важно, чтобы
каждый шаг был независимым и при этом тесно связан с предыдущими и
последующими, что обеспечивает правильную сборку данных.
const createStep = (stepNumber, inputType, inputLabel, validationMessage) => {
return Swal.fire({
title: `Шаг ${stepNumber}: ${inputLabel}`,
input: inputType,
inputLabel: inputLabel,
inputPlaceholder: `Введите ${inputLabel.toLowerCase()}`,
showCancelButton: true,
confirmButtonText: stepNumber === 3 ? 'Завершить' : 'Далее',
preConfirm: (value) => {
if (!value) {
Swal.showValidationMessage(validationMessage);
}
return value;
}
});
};
createStep(1, 'text', 'Имя пользователя', 'Введите имя!');
Этот подход позволяет легко добавлять новые шаги и менять логику, избегая дублирования кода.
Использование многошаговых форм в SweetAlert позволяет улучшить взаимодействие с пользователем, особенно когда форма требует сбора большой или сложной информации. Процесс разделяется на несколько этапов, что помогает пользователю сосредоточиться на одной задаче за раз. С помощью гибкой настройки SweetAlert можно создать удобные, интуитивно понятные интерфейсы для любых задач.