Форма — единственное место, где посетитель что-то отправляет сайту, а не только читает. Отсюда особое отношение: тут человек может ошибиться, бросить дело на полпути или не понять, чего от него хотят.
Зачем это знать
Форму вам напишет нейросеть, и выглядеть она будет прилично. Проверять придётся другое: связана ли подпись с полем, какие условия стоят на ввод, что увидит человек, если ошибётся. Это не видно на картинке — это видно в коде, и три минуты чтения этой статьи дают возможность туда посмотреть.
Из чего состоит форма
Форма — тег <form>, внутри поля и кнопка
отправки. У каждого поля обязательно есть имя
(name): под этим именем значение уйдёт
на сервер. Поле без имени не отправляется вообще — частая
и незаметная ошибка.
<form action="/send.php" method="post">
<label for="name">Как вас зовут</label>
<input id="name" name="name" type="text" required>
<button type="submit">Отправить</button>
</form>
Связь подписи и поля держится на паре
for и id: они должны совпадать.
Тогда щелчок по подписи ставит курсор в поле — мелочь,
которая на телефоне экономит промахи, — а программа чтения
экрана называет поле по имени, а не «поле ввода текста».
Атрибут type: пятнадцать полей вместо одного
Тег <input> один, а видов у него много,
и задаёт вид атрибут type. Это не про красоту:
от него зависит клавиатура на телефоне и проверка введённого.
| Значение | Что даёт |
|---|---|
text |
Обычная строка |
email |
Клавиатура со знаком @ и проверка формата адреса |
tel |
Цифровая клавиатура на телефоне |
checkbox |
Согласие или выбор нескольких вариантов |
radio |
Ровно один вариант из нескольких |
Для длинного сообщения берётся отдельный тег
<textarea>, для списка вариантов —
<select>.
Браузер проверяет сам
Условия на ввод записываются прямо в разметке, и браузер их соблюдает без всякого JavaScript.
| Атрибут | Что требует |
|---|---|
required |
Поле должно быть заполнено |
minlength |
Не короче указанного числа знаков |
max, min |
Границы для чисел и дат |
pattern |
Значение по заданному образцу |
Скрипт нужен не для проверки как таковой, а чтобы показать ошибку по-своему: рядом с полем, вашими словами. Как это делается — в мануале про форму обратной связи.
Проверка в браузере — не защита
Всё, что проверяется на странице, обходится за две минуты: инструменты разработчика открыты у любого. Настоящая проверка происходит на сервере, и она обязательна. Проверка в браузере нужна человеку — чтобы не отправлять форму зря.
Группы полей и что происходит после отправки
Переключатели «удобное время: утро, день, вечер» — это
не три отдельных вопроса, а один. В разметке такая группа
обводится тегом <fieldset>, а общий
вопрос пишется в <legend>. Без этого
программа чтения экрана назовёт каждый переключатель
отдельно, и человек услышит «утро» без всякого вопроса.
Переключатели одной группы связывает общее значение
name: именно поэтому выбрать можно только один.
После нажатия кнопки браузер собирает пары «имя — значение»
и отправляет их по адресу из атрибута
action. Способ задаёт method,
и выбор между двумя способами простой.
| Способ | Что происходит | Когда брать |
|---|---|---|
get |
Значения видны в адресе страницы | Поиск и фильтры: такой адрес можно сохранить и переслать |
post |
Значения уходят внутри запроса, в адресе их нет | Всё остальное: письма, заявки, любые личные данные |
Три мелочи, которые решают
-
autocomplete. С ним браузер подставляет имя, почту и телефон одним касанием. Без него человек набирает адрес пальцем — и часто бросает. - Подпись, а не плейсхолдер. Серый текст внутри поля исчезает при вводе, и человек забывает, что здесь спрашивали. Плейсхолдер — для примера формата, подпись — обязательна.
- Кнопка говорит, что произойдёт. «Отправить сообщение» понятнее, чем «Отправить», и гораздо понятнее, чем «ОК».
Что просить у нейросети
Свёрстай форму записи на занятие: имя, телефон, почта, удобное время из трёх вариантов, комментарий, согласие на обработку данных.
Условия: у каждого поля отдельная подпись
label, связанная через for
и id; правильные значения
type и autocomplete;
обязательные поля помечены required;
варианты времени — переключатели в
fieldset с legend.
Плейсхолдеры вместо подписей не использовать. Классы по БЭМ, семантическая разметка, проверь, что форму можно заполнить одной клавиатурой.
Как проверить, что получилось
- Щёлкнуть по каждой подписи: курсор должен вставать в её поле.
- Заполнить форму, не трогая мышь: только Tab, ввод и Enter.
- Отправить пустую форму: браузер должен остановить отправку и показать, где ошибка.
- Открыть на телефоне: в поле телефона должна появиться цифровая клавиатура.
Что стоит запомнить
-
У каждого поля есть
name— без него значение не отправится -
Подпись связана с полем через
forиid -
typeзадаёт клавиатуру на телефоне и проверку значения - Браузер проверяет введённое сам, если условия стоят в разметке
- Настоящая проверка всегда повторяется на сервере