Предзаполнение полей в SweetAlert позволяет задать значения для ввода данных до того, как пользователь начнет взаимодействовать с элементами формы. Эта возможность полезна, например, для отображения заранее подготовленной информации в диалогах, таких как редактирование профиля, подтверждение или автозаполнение при запросах.
SweetAlert поддерживает ввод данных через текстовые поля, и одним из
популярных методов является использование опции input.
Когда требуется предзаполнить поле значением, нужно указать начальный
текст через параметр inputValue. Это позволяет задать
значение, которое будет отображаться в поле ввода сразу после открытия
модального окна. Пример базового использования:
Swal.fire({
title: 'Ваше имя',
input: 'text',
inputValue: 'Иван', // Предзаполненное значение
showCancelButton: true,
confirmButtonText: 'Подтвердить'
});
В этом примере при открытии модального окна в поле ввода уже будет написано имя “Иван”. Пользователь может либо оставить это значение, либо ввести свое.
Иногда необходимо предзаполнить поле значением, которое определяется динамически, например, из базы данных или состояния приложения. В таких случаях можно использовать переменные или результаты асинхронных запросов. Например, если требуется вывести имя пользователя из профиля:
let userName = getUserNameFromDatabase(); // Функция для получения имени пользователя
Swal.fire({
title: 'Ваше имя',
input: 'text',
inputValue: userName, // Динамическое значение
showCancelButton: true,
confirmButtonText: 'Подтвердить'
});
Здесь переменная userName будет содержать имя, которое
будет автоматически вставлено в поле ввода, позволяя пользователю
редактировать его, если это необходимо.
SweetAlert позволяет использовать несколько полей ввода одновременно
в одном модальном окне. Для этого можно использовать параметр
input в сочетании с массивами. Каждый элемент массива
описывает отдельное поле ввода с параметрами, включая возможность
предзаполнить их.
Swal.fire({
title: 'Редактирование профиля',
html:
'<input id="swal-input1" class="swal2-input" value="Иван">' +
'<input id="swal-input2" class="swal2-input" value="ivan@example.com">',
focusConfirm: false,
preConfirm: () => {
return [
document.getElementById('swal-input1').value,
document.getElementById('swal-input2').value
]
}
});
В данном примере два текстовых поля (input1 и
input2) предзаполняются значениями, которые затем могут
быть изменены пользователем. Когда форма отправляется, значения из обоих
полей собираются и могут быть использованы для дальнейших действий.
Иногда бывает полезно менять предзаполненное значение динамически в процессе работы с модальным окном. Для этого можно использовать методы JavaScript для обновления значения в поле ввода после того, как окно уже было открыто.
let dynamicValue = 'Измененное значение';
Swal.fire({
title: 'Ваш адрес',
input: 'text',
inputValue: 'Исходный адрес',
showCancelButton: true,
confirmButtonText: 'Подтвердить'
}).then((result) => {
if (result.isConfirmed) {
// Динамическое обновление значения
Swal.fire('Новый адрес', dynamicValue);
}
});
Здесь начальное значение “Исходный адрес” будет отображаться в поле
ввода, но по логике программы после обработки действия, например, на
основе внешнего события или асинхронной операции, значение будет
заменено на новое — dynamicValue.
Когда нужно вставить в поле ввода значение, которое включает не только текст, но и изображения, можно использовать HTML разметку внутри модального окна. Пример:
Swal.fire({
title: 'Ваш профиль',
html:
'<input id="swal-input" class="swal2-input" value="https://example.com/profile.jpg">',
showCancelButton: true,
confirmButtonText: 'Сохранить'
});
Здесь поле ввода уже содержит ссылку на изображение. Если требуется добавить изображение в визуальное оформление окна, можно использовать дополнительные HTML теги или даже вставить изображение в отдельный элемент, не ограничиваясь только полем ввода.
Если в модальном окне требуется работать с числовыми данными
(например, возраст, количество товаров и т.д.), важно использовать тип
input с атрибутом type: 'number'. Для
предзаполнения таких полей можно указать значение через
inputValue.
Swal.fire({
title: 'Количество товаров',
input: 'number',
inputValue: 5, // Предзаполненное числовое значение
showCancelButton: true,
confirmButtonText: 'Подтвердить'
});
Этот пример позволяет задать начальное количество товаров, которое можно отредактировать в процессе работы с модальным окном.
Для специфичных случаев, когда необходимо ограничить ввод пользователем (например, для телефонных номеров, дат и т.д.), можно использовать маски ввода в сочетании с SweetAlert. Для этого потребуется сторонняя библиотека, например, Inputmask.
let mask = new Inputmask("+7 (999) 999-99-99"); // Маска для телефона
Swal.fire({
title: 'Введите номер телефона',
input: 'text',
inputValue: '+7 (123) 456-78-90', // Предзаполненное значение
didOpen: () => {
mask.mask(document.querySelector('#swal-input1')); // Применение маски
},
showCancelButton: true,
confirmButtonText: 'Подтвердить'
});
В этом примере телефонный номер предзаполняется в соответствующем поле ввода, и применяется маска для правильного форматирования ввода.
Предзаполнение не всегда является финальной стадией работы с полями
ввода. Иногда бывает нужно сбросить предзаполненные значения, например,
если пользователь решит отменить действие. Это можно сделать через вызов
функции Swal.close() или при изменении состояния кнопки
подтверждения.
Swal.fire({
title: 'Введите новый адрес',
input: 'text',
inputValue: 'Старый адрес',
showCancelButton: true,
confirmButtonText: 'Подтвердить',
}).then((result) => {
if (!result.isConfirmed) {
Swal.close(); // Очистка формы при отмене
}
});
Таким образом, с помощью SweetAlert можно не только задать предзаполненные значения для различных типов полей ввода, но и обеспечить динамическое обновление этих значений в процессе взаимодействия с пользователем.