Перейти к первому, предыдущему, следующему, последнему разделу, оглавлению.


ProgrammerBook.ru: Обратите внимание, что

  1. данный документ является переводом документа «Hypertext Markup Language - 2.0 - Forms»;
  2. данный документ может содержать неточности, опечатки и ошибки перевода;
  3. официальным документом по данной тематике является оригинальный документ на английском языке, расположенный на сайте W3C.

Формы

Форма представляет собой шаблон для набора данных формы и связанного с ним метода, а также URI-адреса обработчика. Набор данных формы представляет собой последовательность пар полей имя/значение. Имена указываются в атрибутах NAME элементов ввода значений формы, а значения задаются начальными значениями с помощью различных форм разметки и в дальнейшем редактируются пользователем. Полученный в итоге набор данных формы используется для получения доступа к информационному сервису как функция обработчика и метод.

Элементы формы могут быть смешаны со структурными элементами документа. Например, элемент PRE может содержать элемент FORM, либо элемент FORM может содержать списки, которые содержат INPUT элементы. Это предоставляет значительную гибкость при проектировании макета форм.

Обработка формы является функцией 2-го уровня.

Элементы формы

Форма: FORM

Элемент FORM содержит последовательность элементов ввода данных, наряду со структурными элементами документа. Атрибуты:

ACTION
указывает URI-адрес обработчика формы. URI-адресом обработчика формы, используемым по умолчанию, является базовый URI-адрес документа (смотрите раздел Гиперссылки).
METHOD
выбирает метод доступа к URI-адресу обработчика. Набор применяемых методов является функцией схемы URI-адреса обработчика формы. Смотрите раздел Запрос Формы: METHOD=GET и раздел Формы с Побочными-Эффектами: METHOD=POST.
ENCTYPE
указывает медиа тип, используемый для кодирования пар имя/значение для их дальнейшей передачи, в случае, если протокол сам не навязвает формат. Смотрите раздел Медиа Тип url-кодирования формы.

Поле Ввода: INPUT

Элемент INPUT репрезентирует поле для ввода пользовательских данных. Атрибут TYPE выделяет несколько разновидностей полей.

Элемент INPUT имеет ряд атрибутов. Набор применяемых атрибутов зависит от значения атрибута TYPE.

Текстовое Поле: INPUT TYPE=TEXT

Значением по умолчанию для атрибута TYPE является `TEXT', обозначающее однострочное текстовое поле. (Для многострочных текстовых полей используйте элемент TEXTAREA).

Обязательные атрибуты:

NAME
имя поля формы, соответствующее этому элементу.

Дополнительные атрибуты:

MAXLENGTH
ограничивает количество символов, которое можно ввести в поле ввода текста. Если значение MAXLENGTH больше значения атрибута SIZE, то полю следует прокручиваться соответствующим образом. По умолчанию количество символов не ограничено.
SIZE
указывает размер отображаемого пространства, выделяемого для этого поля ввода в соответствии с его типом. Значение по умолчанию зависит от агента пользователя.
VALUE
Начальное значение поля.

Например:

<p>Улица: <input name=street><br>
Название города: <input name=city size=16 maxlength=16><br>
Почтовый Индекс: <input name=zip size=10 maxlength=10 value="99999-9999"><br>

Поле Ввода Пароля: INPUT TYPE=PASSWORD

Элемент INPUT с `TYPE=PASSWORD' представляет собой текстовое поле, как указано выше, за исключением того, что значение скрывается, во время его ввода. (Смотри также: раздел Вопросы Безопасности).

Например:

<p>Имя: <input name=login> Пароль: <input type=password name=passwd>

Флажок: INPUT TYPE=CHECKBOX

Элемент INPUT с `TYPE=CHECKBOX' репрезентирует логический выбор. Набор таких элементов с одинаковым именем, репрезентирует поле выбора нескольких-из-многих. Обязательные атрибуты:

NAME
символьное имя поля формы, соответствующее этому элементу или группе элементов.
VALUE
одно из значений поля, передаваемое этим элементом.

Дополнительные атрибуты:

CHECKED
указывает на то, что элемент выбран изначально.

Например:

<p>Какие ароматы Вам нравятся?
<input type=checkbox name=flavor value=vanilla>Ваниль<br>
<input type=checkbox name=flavor value=strawberry>Клубника<br>
<input type=checkbox name=flavor value=chocolate checked>Шоколад<br>

Переключатель: INPUT TYPE=RADIO

Элемент INPUT с `TYPE=RADIO' репрезентирует логический выбор. Набор таких элементов с одинаковым именем, репрезентирует поле выбора одного-из-многих. Как и для флажков атрибуты NAME и VALUE являются обязательными. Дополнительные атрибуты:

CHECKED
указывает на то, что элемент выбран изначально.

На протяжении всего времени, может быть выбран только лишь один из переключателей набора. Если ни один из INPUT элементов набора переключателей не определён как `CHECKED', то агент пользователя должен обозначить первый переключатель как выбранный изначально.

Например:

<p>Какие ароматы Вам нравятся?
<input type=radio name=flavor value=vanilla>Ваниль<br>
<input type=radio name=flavor value=strawberry>Клубника<br>
<input type=radio name=flavor value=chocolate>Шоколад<br>

Серверная Карта Изображения: INPUT TYPE=IMAGE

Элемент INPUT с `TYPE=IMAGE' определяет ресурс изображения для отображения, а также позволяет ввести значения сразу в два поля формы: «х» и «y» координаты пикселя, выбранного в изображении. Имена этих полей представляют собой имя поля с добавлением к нему `.x' и `.y' соответственно. `TYPE=IMAGE' аналогичен активации `TYPE=SUBMIT'; то есть, когда выбран пиксель, происходит отправка значений формы.

Атрибут NAME является обязательным так же как и для других полей ввода. Атрибут SRC так же является обязательным, а вот атрибут ALIGN является дополнительным так же как и для элемента IMG (смотрите раздел Изображение: IMG).

Например:

<p>Выберите точку на карте:
<input type=image name=point src="map.gif">

Скрытое Поле: INPUT TYPE=HIDDEN

Элемент INPUT с `TYPE=HIDDEN' репрезентирует скрытое поле. Пользователь не взаимодействует с этим полем; вместо этого, значение поля задаётся атрибутом VALUE. Атрибуты NAME и VALUE являются обязательными.

Например:

<input type=hidden name=context value="l2k3j4l2k3j4l2k3j4lk23">

Кнопка Отправки: INPUT TYPE=SUBMIT

Элемент INPUT с `TYPE=SUBMIT' репрезентирует опцию ввода, как правило, представленную в виде кнопки, которая сообщает агенту пользователя о необходимости отправки данных формы. Дополнительные атрибуты:

NAME
указывает на то, что данный элемент так же вносится в качестве поля формы, значение которого задаётся атрибутом VALUE. Если атрибут NAME отсутствует, то данный элемент не вносится в качестве поля формы.
VALUE
указывает метку для элемента ввода (кнопки).
Вы можете отправить этот запрос внутрь страны:
<input type=submit name=recipient value=internal><br>
или во внешний мир:
<input type=submit name=recipient value=world>

Кнопка Сброса: INPUT TYPE=RESET

Элемент INPUT с `TYPE=RESET' репрезентирует опцию ввода, как правило, представленную в виде кнопки, которая сообщает агенту пользователя о необходимости сброса полей формы к их исходным состояниям. Атрибут VALUE, если он присутствует, указывает метку для элемента ввода (кнопки).

Когда вы закончите, вы можете отправить этот запрос:
<input type=submit><br>
А так же вы можете очистить форму и начать всё заново в любое время: <input type=reset>

Выбор: SELECT

Элемент SELECT ограничивает поле формы перечисленным списком значений. Значения указываются в элементах OPTION. Атрибуты:

MULTIPLE
указывает на то, что в значение может быть включено более одного варианта.
NAME
определяет имя поля формы.
SIZE
определяет количество видимых элементов. Если количество выбираемых полей равно единице то, как правило, элемент имеет вид выпадающего меню, в то время как, если количество выбираемых полей больше единицы то, как правило, элемент имеет вид списков.

Например:

<SELECT NAME="flavor">
<OPTION>Ваниль
<OPTION>Клубника
<OPTION value="RumRasin">Ром и Изюмом
<OPTION selected>Персик и Апельсин
</SELECT>

В качестве начального состояния выступает состояние, при котором выбран первый вариант, если только ни в одном из OPTION элементов не присутствует атрибута SELECTED.

Вариант: OPTION

Элемент OPTION может находиться только внутри элемента SELECT. Он репрезентирует один вариант и имеет следующие атрибуты:

SELECTED
указывает на то, что данный вариант выбран изначально.
VALUE
указывает значение, которое будет возвращено в случае, если выбран данный вариант. Значением по умолчанию для этого поля является содержимое элемента OPTION.

Содержимое элемента OPTION предоставляется пользователю в качестве репрезентации варианта. Так же оно используется в качестве возвращаемого значения, если отсутствует атрибут VALUE.

Текстовая Область: TEXTAREA

Элемент TEXTAREA репрезентирует многострочное текстовое поле. Атрибуты:

COLS
количество видимых столбцов, отображаемых в текстовой области; измеряется в символах.
NAME
определяет имя поля формы.
ROWS
количество видимых строк, отображаемых в текстовой области; измеряется в символах.

Например:

<TEXTAREA NAME="address" ROWS=6 COLS=64>
HaL Computer Systems
1315 Dell Avenue
Кэмпбелл, Калифорния 95008
</TEXTAREA>

Содержимое элемента TEXTAREA является начальным значением поля.

Как правило, ROWS и COLS атрибуты определяют видимый размер поля в символах. Поле, как правило, представляется шрифтом с фиксированной шириной символов. HTML агентам пользователей следует позволять тексту выходить за эти пределы, обеспечивая прокрутку содержимого по мере её необходимости.

Отправка Формы

HTML агент пользователя начинает обработку формы, представляя документ с полями в их исходном состоянии. Пользователь может изменять значения полей с учётом ограничения типа поля и прочих ограничений. Когда пользователь указывает на то, что форму следует отправить (с помощью кнопки или изображения отправки), набор данных формы обрабатывается в соответствии с его методом, URI-адресом обработчика и типом кодирования.

Когда в форме присутствует только одно однострочное текстовое поле ввода, агенту пользователя следует воспринимать нажатие клавиши Enter в этом поле в качестве запроса на отправку формы.

Медиа Тип url-кодирования формы

Кодированием по умолчанию для всех форм является `application/x-www-form-urlencoded'. Набор данных формы репрезентируется в этом медиа типе следующим образом:

  1. Имена и значения полей формы экранируются: символы пробелов заменяются на `+', после чего экранируются зарезервированные символы в соответствии с [URL]; то есть, не буквенно-цифровые символы заменяются `%HH' -- знаком процента и двумя шестнадцатеричными цифрами, репрезентирующим ASCII-код символа. Разрывы строк, как в значениях многострочных текстовых полей, репрезентируются в виде пар CR LF, то есть `%0D%0A'.
  2. Поля перечисляются в порядке их появления в документе; имя и значение отделяется друг от друга с помощью `=', а пары имя/значение отделяются друг от друга с помощью `&'. Поля с пустыми значениями могут быть опущены. В частности, не выбранные радио кнопки и флажки не следует представлять в закодированных данных, а вот скрытые поля с атрибутами VALUE следует представлять. (26)

Запрос Формы: METHOD=GET

Если обработка формы является идемпотентной (то есть она не имеет прочного заметного влияния на итоговое состояние), то в качестве метода передачи формы следует применять `GET'. Многие запросы к базе данных не имеют видимых побочных эффектов и являются идеально применимыми к запросам форм.

Для обработки формы, URL-адресом обработчика которой является HTTP URL, а так же методом которой является `GET', агент пользователя начинает с URI-адреса обработчика, добавляя к нему `?' и набор данных формы, в формате `application/x-www-form-urlencoded', как указано выше. Агент пользователя затем переходит по ссылке на этот URI так же, как если бы это был якорь (смотрите раздел Активация Гиперссылок). (27)

Формы с Побочными-Эффектами: METHOD=POST

Если сервис, предназначенный для обработки формы, имеет побочные эффекты (например, модифицированную базу данных или подписку на услугу), то в качестве метода следует применять `POST'.

Для обработки формы, URL-адресом обработчика которой является HTTP URL, а так же методом которой является `POST', агент пользователя проводит HTTP POST транзакцию с помощью URI-адреса обработчика, и типом тела сообщения `application/x-www-form-urlencoded' формата как указано выше. Агенту пользователя следует отображать ответ от взаимодействия с HTTP POST так же, как он будет отображать ответ от HTTP GET, указанного выше.

Пример Отправки Формы: Форма Анкеты

Рассмотрим следующий документ:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<title>Образец Отправки HTML-Формы</title>
<H1>Образец Анкеты</H1>
<P>Пожалуйста, заполните эту анкету:
<FORM METHOD="POST" ACTION="http://www.w3.org/sample">
<P>Ваше имя: <INPUT NAME="name" size="48">
<P>Мужчина <INPUT NAME="gender" TYPE=RADIO VALUE="male">
<P>Женщина <INPUT NAME="gender" TYPE=RADIO VALUE="female">
<P>Количество человек в семье: <INPUT NAME="family" TYPE=text>
<P>Города, в которых вы поддерживаете место жительства:
<UL>
<LI>Кент <INPUT NAME="city" TYPE=checkbox VALUE="kent">
<LI>Майами <INPUT NAME="city" TYPE=checkbox VALUE="miami">
<LI>Другие <TEXTAREA NAME="other" cols=48 rows=4></textarea>
</UL>
Ник: <INPUT NAME="nickname" SIZE="42">
<P>Спасибо, что ответили на эту анкету.
<P><INPUT TYPE=SUBMIT> <INPUT TYPE=RESET>
</FORM>

Начальное состояние набора данных формы:

name
""
gender
"male"
family
""
other
""
nickname
""

Обратите внимание, что переключатели имеют начальное значение, в то время как флажок не имеет такового.

Пользователь может заполнить поля и произвести отправку формы. Предположим, что в этот момент были введены следующие значения:

name
"John Doe"
gender
"male"
family
"5"
city
"kent"
city
"miami"
other
"abc\ndef"
nickname
"J&D"

Затем агент пользователя проводит HTTP POST транзакцию с помощью URI `http://www.w3.org/sample'. Тело сообщения будет иметь следующий вид (не обращайте внимание на разрыв строки):

name=John+Doe&gender=male&family=5&city=kent&city=miami&
other=abc%0D%0Adef&nickname=J%26D

Перейти к первому, предыдущему, следующему, последнему разделу, оглавлению.