webroad.online
  1. 1Веб
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Инструменты
  8. 8React
  9. 9Стейт-менеджмент
  10. 10Next.js
  11. 11Формы
  12. 12Данные и бэкенд
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Анимации
  16. 16Тестирование
  17. 17Архитектура
HTML · Урок 2 из 4

Формы

Поля ввода, подписи и валидация без JavaScript.

Обновлено

Что такое форма

Форма собирает данные от пользователя и отправляет их куда-то (на сервер, в функцию). Это самый старый интерактивный механизм веба, и он работает без JavaScript: браузер сам умеет собрать значения и отправить их.

<form action="/subscribe" method="post">
  <label for="email">Email</label>
  <input id="email" name="email" type="email" required />
  <button type="submit">Отправить</button>
</form>

При отправке браузер формирует запрос с email=ana@x.com и отправляет его на /subscribe. В Next action может быть сразу Server Action.

Из чего состоит форма

Атрибут / элемент Роль
action куда отправляются данные
method get (данные в URL — для поиска) или post (в теле — для изменений)
name ключ, под которым приходит значение; без name поле не отправляется
<label for> подпись, связанная с id поля
<button type="submit"> отправляет форму

<button> внутри формы по умолчанию имеет type="submit". Кнопки, которые ничего не отправляют (открывают модалку, удаляют строку), получают type="button".

Типы input — и когда их использовать

Тип Когда Бонус бесплатно
text короткий произвольный текст —
email адрес почты проверка формата, клавиатура с @ на мобильном
password пароль скрытые символы, менеджер паролей
number количество стрелки, min/max/step
tel телефон цифровая клавиатура на мобильном (без проверки)
url ссылка проверка формата
date, time дата / время нативный выбор
search поиск кнопка очистки
checkbox да/нет или несколько вариантов —
radio один вариант из группы (одинаковый name) навигация стрелками
file загрузка accept="image/*"
hidden значение отправляется, но не видно (id, токен) —

Другие элементы: <textarea> (длинный текст), <select> + <option> (список), <fieldset> + <legend> (группа связанных полей).

checkbox, radio или select: один выбор из 2–5 видимых вариантов → radio; один из многих → select; несколько вариантов → checkbox-ы.

Нативная валидация

Атрибут Эффект
required обязательное поле
minlength / maxlength длина текста
min / max / step числа, даты
pattern регулярное выражение
type формат (email, url)

Состояние стилизуют через :invalid, :valid, :user-invalid (только после взаимодействия пользователя).

Проверка в браузере — для удобства пользователя, а не для безопасности. Её может обойти кто угодно → всегда проверяйте и на сервере.

Чтение данных в JS

form.addEventListener('submit', e => {
  e.preventDefault()
  const data = Object.fromEntries(new FormData(e.currentTarget))
})

FormData читает все поля с name — тот же объект получает Server Action. Как работать с формами в React (controlled, React Hook Form, Zod) — в теме Формы.

Частые ошибки

  • Поле без name → значение пропадает при отправке.
  • Поле без label (только placeholder) → недоступно, а подсказка исчезает при вводе.
  • Кнопки без type, которые случайно отправляют форму.
  • Проверка только на клиенте.

Коротко

  • name решает, что отправится; label for + id связывают подпись.
  • Правильный тип input = проверка + нужная клавиатура бесплатно.
  • Всегда проверяйте и на сервере.

Официальные источники

Упражнения

Была ли страница полезной?

Один клик — без регистрации.