Простая контактная форма для сайта

Контактные формы — ключевой элемент сайта: они позволяют посетителям отправлять вопросы, отзывы и запросы. В этом руководстве показан пошаговый процесс создания базовой контактной формы: от настройки проекта до валидации и тестирования. В конце вы получите рабочую, доступную и адаптируемую форму.
Подготовка проекта
Прежде чем писать код, убедитесь, что у вас настроено рабочее окружение. Откройте предпочитаемый редактор кода или IDE (например, Visual Studio Code, Sublime Text).
Создайте папку проекта для хранения файлов HTML и CSS. Внутри создайте отдельные файлы: index.html и style.css. Подключите style.css в секции
вашего HTML через тег .Важно: используйте понятную структуру папок (например, /css, /js, /assets), чтобы масштабировать проект.
HTML: структура формы
Ниже пример минимальной HTML-структуры контактной формы. Комментарии на русском объясняют ключевые атрибуты.
Welcome to my Form
Этот код создаёт элемент
Подпишите обработчик события submit:
form.addEventListener("submit", function (event) { });Запретите перезагрузку страницы при отправке и получите значение email:
form.addEventListener("submit", function (event) {
// Отменяем стандартное поведение формы
event.preventDefault();
// Берём значение поля email, введённое пользователем
const email = document.getElementById("email").value;
});Добавьте регулярное выражение для проверки email и покажите сообщение в зависимости от результата:
form.addEventListener("submit", function (event) {
// Отменяем стандартное поведение формы
event.preventDefault();
// Берём значение поля email, введённое пользователем
const email = document.getElementById("email").value;
// Проверяем email с помощью простого regex-выражения
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailPattern.test(email)) {
alert("Неверный формат email");
return;
}
// Если всё успешно, показываем сообщение об отправке
alert("Форма успешно отправлена");
});Важно: regex выше прост и покрывает базовые случаи. Для строгой проверки используйте серверную валидацию и библиотеки.
Тестирование и отладка
Ничто не заменит тщательное тестирование. Пробуйте различные сценарии:
- Пустые поля — форма не должна отправляться.
- Некорректный email — должно появляться предупреждение.
- Длинные сообщения — textarea не должна ломать верстку.
- Проверка на мобильных устройствах и в разных браузерах.
Добавьте инструменты разработчика в браузере (Console, Network) чтобы отлавливать ошибки JavaScript и следить за сетевыми запросами.
Когда такой подход не подходит
- Если требуется сложная логика проверки (валидация по внешним сервисам, антифрод), одного client-side недостаточно — добавьте серверную проверку.
- Если нужны вложения (файлы большого объёма), потребуется дополнительная обработка на сервере и прогресс-бар.
Альтернативные подходы
- Формы через сторонние сервисы (Typeform, Google Forms) — быстрый запуск без бэкенда.
- Использование библиотек/фреймворков (React/Vue + Formik/Vuelidate) — для сложных интерфейсов.
- HTML5 + Constraint validation API для более богатой встроенной валидации.
Критерии приёмки
- Форма рендерится корректно в основных браузерах (Chrome, Firefox, Safari).
- Все обязательные поля отмечены и проверяются.
- Пользователь получает понятные ошибки при неверных данных.
- Отсутствуют JS-ошибки в консоли при отправке.
Чеклист по ролям
Дизайнер:
- Проверил визуальные состояния фокуса и ошибки.
- Утвердил размеры и отступы для мобильной версии.
Разработчик:
- Подключил CSS и JS, добавил обработчики событий.
- Реализовал серверную валидацию (если есть бэкенд).
QA:
- Протестировал кейсы позитив/негатив.
- Проверил доступность (Tab, screen reader).
Набор тестов (пример)
- Попытка отправить пустую форму — ожидается запрет отправки.
- Ввод “user@” в поле email — ожидается сообщение об ошибке.
- Ввод корректного email и сообщения — ожидается успех (alert или редирект).
- Тест на мобильных: проверка расположения элементов и размера кликабельных областей.
Безопасность и конфиденциальность
Важно проверять данные на стороне сервера: клиентская валидация легко обходится. Если вы собираете персональные данные, убедитесь в соответствии локальным законам о защите данных (например, GDPR для ЕС): минимизируйте сбор данных, храните их безопасно и сообщайте пользователю цель сбора.
Важно: никогда не логируйте чувствительные данные в публичные логи.
Короткий глоссарий
- required — HTML-атрибут, отмечающий поле как обязательное.
- regex — регулярное выражение для проверки строк.
- textarea — многострочное текстовое поле.
Резюме
Вы создали базовую контактную форму: структуру HTML, базовую стилизацию и простую клиентскую валидацию. Для продакшна добавьте серверную проверку, обработку ошибок и соблюдение требований по защите данных.
Важно: адаптируйте форму под реальные требования вашего проекта — иногда нужна интеграция с CRM, антиспамом или системой уведомлений.
Дополнительно: рассмотрите интеграцию с CAPTCHA и логированием попыток отправки, если ожидаете высокий объём спама.