17 Формы

Содержание

  1. Введение в формы
  2. Управляющие элементы
    1. Типы управляющих элементов
  3. Элемент FORM
  4. Элемент INPUT
    1. Типы управляющих элементов, создаваемые с помощью элемента INPUT
    2. Примеры форм с управляющими элементами типа INPUT
  5. Элемент BUTTON
  6. Элементы SELECT, OPTGROUP и OPTION
    1. Заранее выбранные варианты
  7. Элемент TEXTAREA
  8. Элемент ISINDEX
  9. Метки
    1. Элемент LABEL
  10. Добавление в формы структуры: элементы FIELDSET и LEGEND
  11. Переход фокуса на элемент
    1. Переход с помощью клавиши Tab
    2. Клавиши доступа
  12. Отключенные управляющие элементы и элементы только для чтения
    1. Отключенные управляющие элементы
    2. Управляющие элементы только для чтения
  13. Отправка формы
    1. Метод отправки формы
    2. Успешные управляющие элементы
    3. Обработка данных формы
    4. Типы содержимого формы

17.1 Введение в формы

Форма HTML - это раздел документа, в котором содержатся обычная информация, разметка и специальные элементы, называемые управляющими элементам (флажки, кнопки с зависимой фиксацией, меню и т.д.), а также метки этих управляющих элементов. Обычно пользователи "заполняют" форму, модифицируя управляющие элементы (вводя текст, выбирая пункты меню и т.д.) перед тем, как предоставить форму агентц пользователя для обработки (например, на Web-серввер, на почтовый сервер и т.д.)

Вот простая форма, включающая метки, кнопки с зависимой фиксацией и кнопки (очистка формы или отправка):

 <FORM action="http://somesite.com/prog/adduser" method="post">
    <P>
    <LABEL for="firstname">Имя: </LABEL>
              <INPUT type="text" id="firstname"><BR>
    <LABEL for="lastname">Фамилия: </LABEL>
              <INPUT type="text" id="lastname"><BR>
    <LABEL for="email">Адрес электронной почты: </LABEL>
              <INPUT type="text" id="email"><BR>
    <INPUT type="radio" name="sex" value="Male"> Мужской<BR>
    <INPUT type="radio" name="sex" value="Female"> Женский<BR>
    <INPUT type="submit" value="Отправить"> <INPUT type="reset">
    </P>
 </FORM>

Примечание. В данной спецификации имеется более подробная информация о формах в подразделах о проблемах отображения форм.

17.2 Управляющие элементы

Пользователи взаимодействуют с формами с помощью именованных управляющих элементов.

"Имя элемента" задается атрибутом name. Областью действия атрибута name для управляющего элемента в элементе FORM является элемент FORM.

Каждый управляющий элемент имеет начальное и текущее значение, оба они являются символьными строками. Информацию о начальных значениях и возможных ограничениях на значения см. в определении управляющего элемента. В общем случае "исходное значение" управляющего элемента может задаваться с помощью атрибута value. Однако исходное значение элемента TEXTAREA задается его содержимым, а исходное значение элемента OBJECT в форме определяется реализацией объекта (т.е лежит вне области, рассматриваемой в данной спецификации).

"Текущее значение" управляющего элемента сначала устанавливается равным начальному значению. Затем текущее значение может изменяться пользователем или скриптами.

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

Когда форма предоставляется для обработки, с формой передаются пары управляющий элемент-текущее значение. Передаваемые пары имя/значение называются успешными управляющими элементами.

17.2.1 Типы управляющих элементов

В HTML определены следующие типы управляющих элементов:

кнопки
Авторы могут создавать три типа кнопок:

Авторы создают кнопки с помощью элемента BUTTON или INPUT. Подробнее об определении различных типов кнопок см. в определении этих элементов.

Примечание. Авторам следует обратить внимание на то, что элемент BUTTON предоставляет более широкие возможности представления кнопки, чем элемент INPUT.

флажки
Флажки (и кнопки с зависимой фиксацией) - это переключатели вкл./выкл., которые могут переключаться пользователем. Переключатель "включен", если для управляющего элемента установлен атрибут selected.

При отправке формы успешными могут стать только включенные переключатели. Несколько флажков в форме могут иметь одно и то же имя управляющего элемента. Таким образом, например, флажки позволяют пользователям выбрать несколько значений для одного и того же свойства. Для создания флажков используется элемент INPUT.

кнопки с зависимой фиксацией
Кнопки с зависимой фиксацией похожи на флажки за исключением того, что, если несколько кнопок используют одно и то же имя управляющего элемента, они являются взаимоисключающими: если одна кнопка включена, другие обязательно выключены. Для создания кнопок с зависимой фиксацией используется элемент INPUT.
меню
Предоставляют пользователям варианты на выбор. Меню создается с помощью элемента SELECT, а также элементов OPTGROUP и OPTION.
текстовый ввод
Для ввода текста пользователем авторы могут создавать управляющие элементы двух типов. Элемент INPUT создает управляющий элемент для ввода текста из одной строки, а элемент TEXTAREA - элемент для ввода текста из нескольких строк. В обоих случаях вводимый текст становится текущим значением управляющего элемента.
выбор файлов
Управляющие элементы этого типа позволяют пользователям выбирать файлы, содержимое которых может передаваться вместе с формой. Для создания этого управляющего элемента используется элемент INPUT.
скрытые управляющие элементы
Авторы могут создавать управляющие элементы, не представляемые пользователям, но имеющие значения, которые передаются с формой. Обычно они используются для хранения информации между обменом клиент/сервер, которая в противном случае могла бы пропасть вследствие stateless природы протокола HTTP (см. [RFC2068]). Для создания скрытого управляющего элемента используется элемент INPUT.
объекты
Авторы могут помещать в формы общие объекты, так что связанные с ними значения будут передаваться с другими управляющими элементами. Для создания таких управляющих элементов используется элемент OBJECT.

Элементы, используемые для создания управляющих элементов, обычно располагаются в элементе FORM, но могут находиться и за пределами объявления FORM, если они используются для построения интерфейса пользователя. Это обсуждается в разделе о внутренних событиях. Обратите внимание, что управляющие элементы за пределами формы не могут быть успешными.

17.3 Элемент FORM

<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- интерактивная форма -->
<!ATTLIST FORM
  %attrs;                              -- %coreattrs, %i18n, %events --
  action      %URI;          #REQUIRED -- обработчик формы на сервере --
  method      (GET|POST)     GET       -- метод HTTP, используемый для отправки формы--
  enctype     %ContentType;  "application/x-www-form-urlencoded"
  onsubmit    %Script;       #IMPLIED  -- форма отправлена --
  onreset     %Script;       #IMPLIED  -- форма сброшена --
  accept-charset %Charsets;  #IMPLIED  -- список поддерживаемых наборов символов --
  >

Начальный тег: обязателен, Конечный тег: обязателен

Определения атрибутов

action = uri [CT]
Задает агента для обработки формы. Например, значением может быть URI HTTP (для передачи формы в программу) или mailto URI (для отправки формы по электронной почте).
method = get|post [CI]
Определяет метод HTTP, используемый для передачи набора данных формы. Возможные значения (с учетом регистра) - "get" (по умолчанию) и "post". Подробнее см. в разделе об отправке формы.
enctype = content-type [CI]
Этот атрибут задает тип содержимого, используемый для отправки формы на сервер (если для метода используется значение "post"). По умолчанию для этого атрибута используется значение "application/x-www-form-urlencoded". С элементом INPUT, type="file" должно использоваться значение "multipart/form-data".
accept-charset = список наборов символов [CI]
Этот атрибут задает список кодировок символов для ввода данных, которые должны приниматься обрабатывающим эту форму сервером. Значением является разделенный пробелами и/или запятыми список значений charset. Сервер должен интерпретировать этот список как список исключающих или, то есть он должен принимать любую кодировку для загруженного объекта.

По умолчанию значением этого атрибута является зарезервированная строка "UNKNOWN". Агенты пользователей могут интерпретировать это значение как кодировку символов, используемую для передачи документа, содержащего этот элемент FORM.

accept = content-type-list [CI]
Этот атрибут определяет разделенным запятыми список типов содержимого, которые должен корректно обрабатывать сервер, обрабатывающий форму. Агенты пользователей могут использовать эту информацию для отфильтровывания отвечающих спецификации файлов при предложении пользователю выбора файлов для отправки на сервере (если в элементе INPUT указано type="file").

Элемент FORM служит контейнеров для управляющих элементов. Он определяет:

  • Макет формы (дается содержимым элемента).
  • Программу, которая будет обрабатывать заполенную и переданную форму (атрибут action). Получающая форму программа должна иметь возможность определения пар имя/значение, чтобы их использовать.
  • Метод отправки данных на сервер (атрибут method).
  • Кодировку символов, которая должна приниматься сервером для обработки этой формы (атрибут accept-charset). Агенты пользователей могут рекомендовать пользователю значение атрибута accept-charset и/или не позволять пользователям вводить нераспознаваемые символы.

Форма помимо управляющих элементов может содержать текст и разметку (абзацы, списки и т.д.).

В следующем примере показана форма, которая должна обрабатываться программой "adduser". Эта форма будет отправляться с использованием метода HTTP "post".

 <FORM action="http://somesite.com/prog/adduser" method="post">
 ...содержимое формы...
 </FORM>

В следующем примере показана отправка формы на адрес электронной почты:

 <FORM action="mailto:Kligor.T@gee.whiz.com" method="post">
 ...содержимое формы...
 </FORM>

Информацию о том, как агенты пользователя должны подготавливать данные формы для серверов и как они должны обрабатывать ответы от сервера Вы можете найти в разделе об отправке формы.

Примечание. Дальнейшее обсуждение поведения серверов, принимающих данные формы, лежит вне области, рассматриваемой в данной спецификации.

17.4 Элемент INPUT

<!ENTITY % InputType
  "(TEXT | PASSWORD | CHECKBOX |
    RADIO | SUBMIT | RESET |
    FILE | HIDDEN | IMAGE | BUTTON)"
   >

<!-- атрибут является обязательным для всех типов, кроме submit и reset -->
<!ELEMENT INPUT - O EMPTY              -- управляющий элемент формы -->
<!ATTLIST INPUT
  %attrs;                              -- %coreattrs, %i18n, %events --
  type        %InputType;    TEXT      -- тип вводимой информации --
  name        CDATA          #IMPLIED  -- передать как часть формы --
  value       CDATA          #IMPLIED  -- обязателен для кнопок с зависимой фиксацией и флажков --
  checked     (установлен)   #IMPLIED  -- для кнопок с зависимой фиксацией и флажков --
  disabled    (отключен)     #IMPLIED  -- в данном контексте недоступен --
  readonly    (только чтение)#IMPLIED  -- для текста и паролей --
  size        CDATA          #IMPLIED  -- зависит от типа поля --
  maxlength   NUMBER         #IMPLIED  -- максимальное число символов в текстовом поле --
  src         %URI;          #IMPLIED  -- для полей с изображениями --
  alt         CDATA          #IMPLIED  -- краткое описание --
  usemap      %URI;          #IMPLIED  -- использовать клиентскую навигационную карту --
  tabindex    NUMBER         #IMPLIED  -- позиция в последовательности перехода --
  accesskey   %Character;    #IMPLIED  -- клавиша доступа --
  onfocus     %Script;       #IMPLIED  -- фокус на этом элементе --
  onblur      %Script;       #IMPLIED  -- фокус перемещен на другой элемент --
  onselect    %Script;       #IMPLIED  -- выделен некоторые текст --
  onchange    %Script;       #IMPLIED  -- значение элемента изменено --
  accept      %ContentTypes; #IMPLIED  -- список типов MIME для загрузки файлов --
  >

Начальный тег: обязателен, Конечный тег: запрещен

Определения атрибутов

type = text|password|checkbox|radio|submit|reset|file|hidden|image|button [CI]
Определяет тип управляющего элемента. По умолчанию используется значение "text".
name = cdata [CI]
Определяет имя управляющего элемента.
value = cdata [CA]
Определяет начальное значение управляющего элемента. Этот атрибут не обязателен, если только для атрибута type не установлено значение "radio".
size = cdata [CN]
Сообщает агенту пользователя начальную ширину управляющего элемента. Ширина дается в пикселах, если для атрибута type не установлено значение "text" или "password". В этом случае ширина задается в числе символов (число должно быть целым).
maxlength = число [CN]
Если для атрибута type установлено значение "text" или "password", этот атрибут определяет максимальное число символов, вводимых пользователем. Это число может превышать указанный в атрибуте size размер поля; в этом случае агент пользователя должен обеспечивать механизм прокрутки. По умолчанию число символов не ограничено.
checked [CI]
Если для атрибута type установлено значение "radio" или "checkbox", этот логический атрибут указывает, что флажок установлен. Агенты пользователей должны игнорировать этот атрибут для других типов управляющих элементов.
src = uri [CT]
Если атрибут type имеет значение "image", этот атрибут определяет местоположение изображения, используемое для представления графической кнопки.

17.4.1 Типы управляющих элементов, создаваемые с помощью элемента INPUT

Тип управляющего элемента, определяемый элементом INPUT, зависит от значения атрибута type:

text
Создает элемент для ввода текста из одной строки.
password
Аналогичен значению "text", но вводимый текст представляется таким образом, чтобы не отображать символы (например, в виде ряда звездочек). Этот управляющий элемент часто используется для ввода паролей. Обратите внимание, что текущим значением является текст, введенный пользователем, а не текст, представляемый агентом пользователя.

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

checkbox
Создает флажок.
radio
Создает кнопку с зависимой фиксацией.
submit
Создает кнопку отправки.
image
Создает графическую кнопку отправки. Значение атрибута src задает URI изображения, используемого для представления кнопки. Из соображений доступности авторам следует предусматривать альтернативный текст для изображения с помощью атрибута alt.

Если для щелчка на изображении используется указующее устройство, на сервер передаются форма и координаты щелчка. Значение x измеряется в пикселах от левой границы изображения, а значение y - в пикселах от верхней границы изображения. В передаваемые данные включаются последовательности имя.x=значение-x и name.y=значение-y, где "имя" - значение атрибута name, а значение-x и значение-y - значения координат x и y соответственно.

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

  • Использовать несколько кнопок отправки (каждая с отдельным изображением) вместо одной графической кнопки. Можно использовать для управления местоположением этих кнопок таблицы стилей.
  • Использовать клиентские изображения-карты и скрипты.
reset
Создает кнопку сброса.
button
Создает другую кнопку. Агенты пользователей должны использовать в качестве метки на кнопке значение атрибута value.
hidden
Создает <