Featherlight — это легковесная библиотека для создания лайтбоксов на JavaScript, которая отличается минималистичностью и высокой гибкостью. Одной из распространённых задач является размещение внутри лайтбокса интерактивных форм, будь то простая форма обратной связи или сложный многошаговый процесс.
Формы в Featherlight можно интегрировать двумя основными способами: через HTML-контент, уже присутствующий на странице, и через AJAX-загрузку контента. Первый способ удобен для статических форм, второй — для динамических и изменяемых форм.
Форма может быть размещена в скрытом блоке на странице и отображена в лайтбоксе при клике на элемент триггера:
<a href="#" data-featherlight="#contactForm">Открыть форму</a>
<div id="contactForm" style="display: none;">
<form id="lightboxForm">
<label for="name">Имя:</label>
<input type="text" id="name" name="name" required>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<button type="submit">Отправить</button>
</form>
</div>
Ключевые моменты:
style="display: none;" предотвращает показ формы на
основной странице.data-featherlight="#contactForm" связывает
триггер с нужным содержимым.submit, валидацию HTML5 и
любые скрипты.Featherlight позволяет загружать форму через AJAX, что полезно, если форма генерируется сервером или требует обновления данных перед открытием.
$('a.ajaxForm').featherlight({
ajax: '/form.html',
afterContent: function() {
const form = this.$content.find('form');
form.on('submit', function(e) {
e.preventDefault();
$.post('/submit', form.serialize(), function(response) {
alert('Форма успешно отправлена');
$.featherlight.close();
});
});
}
});
Особенности:
ajax указывает URL для загрузки содержимого.afterContent позволяет сразу привязать обработчики
событий к форме после её загрузки в лайтбокс.this.$content.find('form') обеспечивает
корректную работу с динамически добавленной формой.Для обеспечения корректной работы форм внутри лайтбокса необходимо учитывать несколько аспектов:
Валидация на стороне клиента Можно использовать
стандартные HTML5-атрибуты (required, pattern)
или подключать сторонние библиотеки вроде jQuery Validation.
Перехват события отправки Для AJAX-форм важно
предотвращать стандартное поведение с помощью
event.preventDefault() и самостоятельно обрабатывать
данные.
Закрытие лайтбокса после успешной отправки Метод
$.featherlight.close() закрывает окно программно после
успешного выполнения запроса.
Featherlight поддерживает создание многошаговых форм с переключением шагов внутри одного лайтбокса. Это реализуется через скрытие и отображение отдельных блоков внутри контейнера:
<div id="multiStepForm" style="display:none;">
<div class="step step-1">
<label>Имя:</label>
<input type="text" name="name">
<button class="next">Далее</button>
</div>
<div class="step step-2" style="display:none;">
<label>Email:</label>
<input type="email" name="email">
<button class="prev">Назад</button>
<button type="submit">Отправить</button>
</div>
</div>
$('.next').on('click', function() {
$(this).closest('.step').hide().next('.step').show();
});
$('.prev').on('click', function() {
$(this).closest('.step').hide().prev('.step').show();
});
Преимущества такого подхода:
Featherlight позволяет кастомизировать формы через стандартные CSS-классы и опции:
class для контейнера: добавление уникальных стилей для
конкретной формы.closeOnEsc и closeOnClick — управление
поведением закрытия лайтбокса.beforeOpen и afterClose — хуки для
инициализации и очистки формы.Пример:
$('a#openForm').featherlight('#contactForm', {
closeOnEsc: true,
closeOnClick: false,
afterClose: function() {
this.$content.find('form')[0].reset();
}
});
Эта настройка гарантирует, что после закрытия форма очищается, а пользователь получает чистый интерфейс при следующем открытии.
Featherlight хорошо сочетается с jQuery-плагинами для форм:
jquery.mask)tooltipster)jquery.validate)Все скрипты подключаются к форме через хуки afterContent
или стандартные события submit и focus, что
обеспечивает полную совместимость и предсказуемое поведение.
Таким образом, Featherlight предоставляет гибкую платформу для размещения интерактивных форм с поддержкой AJAX, многошаговых интерфейсов, валидации и интеграции со сторонними библиотеками, сохраняя лёгкость и простоту настройки.