Кратко
СкопированоТег <form> добавляет на страницу форму, которую пользователь может заполнить. Например, ввести своё имя, фамилию или почту. Данные формы отправляются на сервер.
Пример
Скопировано
<form action="" method="get"> <p> <label for="name">Введите имя:</label> <input type="text" name="name" id="name" required> </p> <p> <label for="email">Введите email:</label> <input type="email" name="email" id="email" required> </p> <button type="submit">Отправить</button></form>
<form action="" method="get">
<p>
<label for="name">Введите имя:</label>
<input type="text" name="name" id="name" required>
</p>
<p>
<label for="email">Введите email:</label>
<input type="email" name="email" id="email" required>
</p>
<button type="submit">Отправить</button>
</form>
Как понять
СкопированоСайты используют формы, чтобы получить какую-то информацию от пользователя. Это может быть форма заказа в онлайн-магазине или форма обратной связи. Пользователь заполняет поля или выбирает нужную опцию в списке, а после отправки формы эти данные можно обработать.
Как пишется
СкопированоСтилизовать <form> можно с помощью CSS.
На странице можно сделать сколько угодно форм. Но одновременно пользователь сможет отправить только одну заполненную форму.
Атрибуты
Скопированоaction — здесь указывается ссылка на скрипт, который обработает форму. Это может быть полная URL-ссылка, а может быть относительная, типа html. Если не указать атрибут action, то страница будет просто обновляться каждый раз, когда отправляется форма.
method — может определять, каким способом будут отправлены на сервер данные, которые ввёл пользователь. Есть два варианта:
get— ответы пользователя дописываются в URL в формате «параметр=значение», например «email=name@yandex.ru». Выглядит это так:site. То есть параметр — это то, что вы спрашиваете у пользователя, а значение — его ответ. Пары «параметр=значение» разделяются знаком. com / form ? name = Max&email = name@yandex . ru &. Вариантmethodиспользуется по умолчанию, но у него есть ограничение: URL не должен получиться длиннее, чем 3000 символов.= "get" post— данные из формы пакуются в тело формы и отправляются на сервер. В этом случае нет ограничений по объёму данных, поэтому этот способ подойдёт для заполнения базы данных или отправки файлов.
Ещё у атрибута method может быть третье значение — dialog. Если <form> находится внутри <dialog>, то поля формы не очищаются, а сама форма не делает запроса на сервер. Вместо этого, закрывается диалоговое окно. В статье «Работа с формами» можно узнать, как отправить данные на сервер с помощью JavaScript.
name — уникальное имя формы. Пользователь его не увидит, зато скрипты смогут найти нужную форму. Например, по этому имени, можно получить доступ к форме из коллекции document.
autocomplete — включает или выключает автозаполнение для формы. Браузер может подставить данные, которые пользователь сохранил ранее, например, пароль, номер банковской карты или адрес. Если у пользователя в настройках браузера отключена функция автозаполнения, то этот атрибут уже ни на что не повлияет. Атрибут autocomplete можно задать и для конкретных элементов. Есть два значения:
on— значение по умолчанию. Включает автозаполнение для этой формы.off— выключает автозаполнение. Например, если форма собирает уникальные данные типа капчи («Введите слово с картинки»).
novalidate — у этого атрибута нет значения. Если его добавить, браузер не будет проверять правильность заполнения формы. Например, верно ли введён адрес почты или URL для тегов <input type и <input type соответственно. Обычно браузер проверяет, не пропустили ли вы @ или домен. В том числе, проверяется и заполнение обязательных полей.
enctype — определяет, какой вид кодирования будет применён к данным из формы. Этот атрибут обязательно надо ставить, если через форму отправляются файлы, в остальных случаях — не обязательно. Есть три варианта кодирования:
application— это значение по умолчанию. Данные будут кодироваться так, что пробелы превратятся в знак/ x - www - form - urlencoded +, а символы вроде кириллицы будут представлены в шестнадцатеричном значении. Например, так будет выглядеть имя Степан:%🤡D0 % A1 % D1 % 82 % D0 % B5 % D0 % B F % D0 % B0 % D0 % B D multipart— вариант, который надо указать, если через форму отправляются файлы. В этом случае данные не кодируются./ form - data text— в этом случае пробелы меняются на/ plain +, а остальные символы передаются без изменений.
accept — задаёт кодировку, в которой сервер принимает данные из формы. Самая распространённая кодировка — UTF. Можно указать один вариант или несколько. Например, accept. В этом случае названия кодировок нужно разделять пробелами. Здесь можно задать значение по умолчанию: accept. Тогда кодировка будет такой, какая используется на странице с формой.
Подсказки
Скопировано💡 Никогда не используйте method, если хочется отправить конфиденциальные данные, потому что их можно будет легко прочитать в запросе, который отправляет форма, и даже в адресной строке браузера.
💡 Вариант method удобен тем, что полученный URL с ответами можно сохранить в закладки. Например, пользователь может заполнить форму и поделиться ссылкой с результатами с кем-нибудь ещё.
Ещё примеры
СкопированоВот простая форма:
<!-- Эта форма отправит значение методом GET — мы получим URL с ответом --> <form action="" method="get"> <label> Имя первого гостя: <input type="text" name="name"> </label> <button type="submit">Сохранить</button> </form><!-- Эта форма отправит данные методом POST --><form action="" method="post"> <label for="post-name"> Имя второго гостя: <input id="post-name" type="text" name="name"> </label> <button type="submit">Сохранить</button></form><!-- Форма с радиокнопками --><form action="" method="post"> <fieldset> <legend>Выберите прожарку</legend> <label> <input type="radio" name="level"> Rare </label> <label> <input type="radio" name="level"checked> Medium </label> <label> <input type="radio" name="level"> Well Done </label> </fieldset></form>
<!-- Эта форма отправит значение методом GET — мы получим URL с ответом -->
<form action="" method="get">
<label>
Имя первого гостя:
<input type="text" name="name">
</label>
<button type="submit">Сохранить</button>
</form>
<!-- Эта форма отправит данные методом POST -->
<form action="" method="post">
<label for="post-name">
Имя второго гостя:
<input id="post-name" type="text" name="name">
</label>
<button type="submit">Сохранить</button>
</form>
<!-- Форма с радиокнопками -->
<form action="" method="post">
<fieldset>
<legend>Выберите прожарку</legend>
<label>
<input type="radio" name="level">
Rare
</label>
<label>
<input type="radio" name="level"checked>
Medium
</label>
<label>
<input type="radio" name="level">
Well Done
</label>
</fieldset>
</form>
Попробуем отправить данные, которые введёт пользователь, на почту. Для этого вместо URL-ссылки мы пропишем action. Ключевое слово mailto позволяет отправить что угодно на электронную почту. Не забудьте добавить атрибут enctype тегу <form>, чтобы письмо отображалось корректно:
<form action="mailto:html@yandex.ru" enctype="text/plain"> <label> Ваше имя <input type="text" name="name" required> </label> <label> Что вы хотите заказать? <input type="text" name="order" required> </label> <button type="submit">Сделать заказ</button></form>
<form action="mailto:html@yandex.ru" enctype="text/plain">
<label>
Ваше имя
<input type="text" name="name" required>
</label>
<label>
Что вы хотите заказать?
<input type="text" name="order" required>
</label>
<button type="submit">Сделать заказ</button>
</form>
На практике
Скопированосоветует
Скопировано🛠 Без тега <form> форма не будет работать, но это не всё, что нужно для получения данных. Введённые пользователем данные нужно собирать и отправлять на сервер. Уже на сервере с данными что-то будет происходить: будет отправляться письмо на почту или формировать заказ. За обработку и отправку данных отвечают атрибуты method и action.
Если у тега формы не указывать ни action, ни method, как в примере ниже, то данные никуда не отправятся, а страница перезагрузится:
<form> <label>Имя: <input type="text" name="firstName"></label> <button type="submit">Отправить</button></form>
<form>
<label>Имя: <input type="text" name="firstName"></label>
<button type="submit">Отправить</button>
</form>
Отправка формы с помощью атрибутов action и method происходит синхронно — браузер отправляет запрос по адресу и рисует на экран все, что вернётся в ответ. Это приводит к полной перезагрузке страницы.
Можно отправлять формы асинхронно, без перезагрузки страницы, но для этого нужно писать JavaScript код, который будет отправлять запрос, получать ответ и обновлять страницу данными из ответа. Читайте, как делать асинхронные формы в статье «Работа с формами» раздела JavaScript.
советует
Скопировано🛠 Формы очень часто встречаются на сайтах. С их помощью пользователю предлагается оформить подписку, отправить запрос на цену, записаться на приём к врачу, авторизоваться на сайте и тому подобное.
Посвятите время детальному изучению форм. В том числе тому, как их стилизовать. Это отдельная боль — стилизовать разные поля формы крайне муторно. А чтобы делать это кроссплатформенно, нужно изрядно набить руку.