Глава 1.8. Формы1.8.1. Общее описаниеВсе рассмотренные нами до сих пор элементы обеспечивали только пассивное взаимодействие пользователя с обозревателем просмотр Веб-страниц и переход к другим Веб-страницам с помощью гиперссылок. Однако, во многих случаях Веб нуждается в активном взаимодействии с пользователем, т. е. в получении от него информации. Для интерактивного взаимодействия с пользователем язык HTML содержит т. н. формы. Форма это раздел HTML-документа, которая наряду с обычным содержанием содержит управляющие элементы (поля ввода, кнопки, флажки, переключатели, меню и т. д.), а также метки этих элементов. Пользователь заполняет форму, изменяя ее управляющие элементы (например, путем ввода текста или выбора пункта меню), а затем пересылает заполненную форму для обработки серверу; обычно это Веб-сервер или сервер электронной почты. Таким образом, центральной частью любой формы являются ее управляющие элементы. Каждый из них имеет имя, заданное атрибутом name и действующее в пределах текущей формы. Кроме того, он имеет начальное значение и текущее значения, которые являются символьными строками. Начальное значение элемента задается его атрибутами и становится текущим значением элемента при первом отображении формы или при ее повторной инициализации. В дальнейшем пользователь может изменить текущее значение элемента. Когда заполненная форма пересылается для обработки, пересылается и часть ее управляющих элементов в виде пар имя/значение. Такие управляющие элементы называются успешными. HTML поддерживает следующие типы управляющих элементов:
Об обработке форм см. WDH+: Полнофункциональная проверка формы. 1.8.2. Создание формы: элемент FORMСинтаксис: <FORM> </FORM> (блочный элемент) Атрибуты: id, class, style, title, lang, dir, события action = URI (URI обработчика формы) method = get | post (метод HTTP пересылки формы) enctype = тип файла (тип файла для пересылки формы) accept = типы файлов (список допустимых типов файлов) accept-charset = кодировки (список допустимых кодировок символов) name = CDATA (название формы для сценариев) target = фрейм (фрейм для отображения результатов) onsubmit = сценарий (пересылка формы) onreset = сценарий (инициализация формы) Поддержка: Атрибуты accept и accept-charset игнорируются (5.0+) Атрибуты accept и accept-charset игнорируются (4.0+) Элемент FORM используется для создания интерактивных форм и служит контейнером для управляющих элементов, образующих форму. Помимо управляющих элементов он может содержать сценарии и любые блочные элементы, кроме FORM. Данный элемент может содержаться в элементах BLOCKQUOTE, BODY, BUTTON, DD, DEL, DIV, FIELDSET, FORM, IFRAME, INS, LI, MAP, NOFRAMES, NOSCRIPT, OBJECT, TD и TH. Обязательный атрибут action задает URI программы, принимающей и обрабатывающей результаты заполнения формы пользователем. Обычно это CGI-сценарий или Java-программа, работающая на Веб-сервере. Кроме того, в качестве action возможно задание URI электронной почты вида mailto:name@server.com. Способ пересылки формы определяется атрибутами method и enctype. Он состоит в следующем:
Элемент FORM может также иметь следующие необязательные атрибуты:
Кроме того, данный элемент поддерживает обработку двух нестандартных событий:
Следующий пример формы содержит поля ввода, переключатели и кнопки сброса и пересылки формы: <FORM action="http://mysite.com/cgi-bin/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">E-mail: </LABEL> <INPUT type="text" id="email"><BR> <INPUT type="radio" name="sex" value="Male" checked="checked"> Мужчина<BR> <INPUT type="radio" name="sex" value="Female"> Женщина<BR> <INPUT type="submit" value="Send"> <INPUT type="reset"> </P> </FORM> Отображаться эта форма будет примерно так: 1.8.3. Ввод данных: элемент INPUTСинтаксис: <INPUT> (содержимого и конечного тега нет) Атрибуты: id, class, style, title, lang, dir, события type = text | password | checkbox | radio | submit | reset | file | hidden | image | button (тип ввода) name = CDATA (имя управляющего элемента) value = CDATA (начальное значение элемента) checked = checked (состояние выбран для флажков и переключателей) readonly = readonly (только чтение для текста и паролей) disabled = disabled (элемент запрещен) size = CDATA (начальная ширина элемента) maxlength = число (максимальное количество символов текста) src = URI (URI графического образа кнопки) alt = текст (альтернативный текст для кнопки) usemap = URI (URI клиентской карты ссылок) ismap = ismap (серверная карта ссылок) accesskey = символ (имя клавиши быстрого доступа) tabindex = число (номер в порядке нажатия табуляции) accept = типы файлов (список допустимых типов файлов) onfocus = сценарий (при получении элементом фокуса) onblur = сценарий (при потере элементом фокуса) onselect = сценарий (при выборе текста элемента) onchange = сценарий (при изменении значения элемента) Поддержка: Атрибуты accept, usemap и ismap игнорируются; клавиша, заданная в accesskey, должна нажиматься вместе с Alt (5.0+) Атрибуты accept, alt, accesskey, tabindex, disabled, readonly, usemap и ismap игнорируются (4.0+) Элемент INPUT создает управляющий элемент формы, предназначенный для ввода данных пользователем. Он может содержаться в любых блочных или текстовых элементах, кроме BUTTON, но многие обозреватели отображают его только тогда, когда он находится внутри элемента FORM. Данный элемент используется для создания различных управляющих элементов, в зависимости от значения атрибута type:
Атрибут disabled запрещает данный управляющий элемент. Это означает, что элемент не может получить фокус, не доступен путем нажатии табуляции и не может быть успешным. Способ отображения запрещенного элемента зависит от обозревателя. Необязательные атрибуты accesskey и tabindex применимы ко всем типам элементов, кроме скрытых:
Данный элемент поддерживает обработку следующих нестандартных событий:
Примеры использования элемента INPUT приведены в предыдущем разделе. 1.8.4. Кнопки: элемент BUTTONСинтаксис: <BUTTON> </BUTTON> (текстовый элемент) Атрибуты: id, class, style, title, lang, dir, события type = submit | reset | button (тип ввода) name = CDATA (имя управляющего элемента) value = CDATA (начальное значение кнопки) disabled = disabled (элемент запрещен) accesskey = символ (имя клавиши быстрого доступа) tabindex = число (номер в порядке нажатия табуляции) onfocus = сценарий (при получении элементом фокуса) onblur = сценарий (при потере элементом фокуса) Поддержка: Соответствует стандарту; клавиша, заданная в accesskey, должна нажиматься вместе с Alt (5.0+) Не поддерживается Элемент BUTTON создает кнопку формы. Он может содержать любые текстовые элементы, кроме A, BUTTON, IFRAME, INPUT, LABEL, SELECT и TEXTAREA, и любые блочные элементы, кроме FORM и FIELDSET. Он может содержаться в любых текстовых и блочных элементах, кроме BUTTON. Кнопки, созданные этим элементом, подобны кнопкам, созданным элементом INPUT, но они могут иметь содержимое. Атрибут name задает имя данного управляющего элемента, а value его начальное значение. Атрибут type задает тип кнопки:
Атрибут disabled запрещает данный управляющий элемент. Это означает, что элемент не может получить фокус, не доступен путем нажатии табуляции и не может быть успешным. Способ отображения запрещенного элемента зависит от обозревателя. Прочие необязательные атрибуты:
Данный элемент поддерживает обработку следующих нестандартных событий:
Следующий пример является переработкой с использованием элемента BUTTON примера формы, приведенного выше: <FORM action="http://mysite.com/cgi-bin/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">E-mail: </LABEL> <INPUT type="text" id="email"><BR> <INPUT type="radio" name="sex" value="Male" checked="checked"> Мужчина<BR> <INPUT type="radio" name="sex" value="Female"> Женщина<BR> <BUTTON name="submit" value="submit" type="submit">Послать</BUTTON> <BUTTON name="reset" type="reset">Сбросить</BUTTON> </P> </FORM> Отображаться эта форма будет примерно так: 1.8.5. Меню: элементы SELECT, OPTGROUP и OPTIONСинтаксис: <SELECT> </SELECT> (текстовый элемент) Атрибуты: id, class, style, title, lang, dir, события name = CDATA (имя управляющего элемента) size = число (количество видимых опций) multiple = multiple (разрешает множественный выбор) disabled = disabled (элемент запрещен) tabindex = число (номер в порядке нажатия табуляции) onfocus = сценарий (при получении элементом фокуса) onblur = сценарий (при потере элементом фокуса) onchange = сценарий (при изменении значения элемента) Поддержка: Соответствует стандарту (5.0+) Атрибуты disabled и tabindex игнорируются (4.0+) Элемент SELECT создает управляющий элемент формы, предназначенный для выбора пользователем опций из списка. Обычно этот элемент отображается в виде выпадающего меню. Его содержимым могут быть только элементы OPTGROUP и OPTION, которые определяют соответствующий список опций. Он может содержаться в любых блочных и текстовых элементах, кроме BUTTON. Атрибут name задает имя данного управляющего элемента. Атрибут size указывает обозревателям размер видимой части списка опций. Если общее количество опций больше, то обозреватель должен обеспечить прокрутку окна списка, чтобы обеспечить доступ ко всем опциям. По умолчанию, пользователь может выбрать только одну опцию из списка. Чтобы разрешить ему выбор нескольких опций одновременно, следует включить в данный элемент атрибут multiple. В этом случае каждая из выбранных опций передается при пересылке формы как отдельная пара имя/значение. Атрибут disabled запрещает данный управляющий элемент. Это означает, что элемент не может получить фокус, не доступен путем нажатии табуляции и не может быть успешным. Способ отображения запрещенного элемента зависит от обозревателя. Значением атрибута tabindex должно быть целое число в диапазоне от 0 до 32767. Это число задает номер данного элемента при движении по Веб-странице нажатиями клавиши Tab. Если tabindex равно 0 или не задано, то данный элемент получит фокус после всех элементом с положительным значением tabindex. При совпадении значений tabindex у нескольких элементов первым получает фокус тот, который раньше встречается в документе. Данный элемент поддерживает обработку следующих нестандартных событий:
Синтаксис: <OPTGROUP> </OPTGROUP> (текстовый элемент) Атрибуты: id, class, style, title, lang, dir, события label = текст (метка группы опций) disabled = disabled (элемент запрещен) Поддержка: Не поддерживается Не поддерживается Синтаксис: <OPTION> </OPTION> (текстовый элемент) Атрибуты: id, class, style, title, lang, dir, события value = CDATA (имя опции) label = текст (метка опции) selected = selected (опция начально выбрана) disabled = disabled (элемент запрещен) Поддержка: Атрибуты disabled и label игнорируются (5.0+) Атрибуты disabled и label игнорируются (4.0+) Элементы OPTION и OPTGROUP предназначены для задания соответственно опций и групп опций. Они могут употребляться только внутри элемента SELECT. Элемент OPTGROUP может содержать только элементы OPTION, а элемент OPTION только обычный текст (включая специальные символы). Обязательный атрибут label элемента OPTGROUP задает метку группы опций, которая может выводиться обозревателем при отображении списка опций. Современные обозреватели не поддерживают этот элемент, но его использование внутри элемента SELECT позволяет сделать логическую структуру меню более наглядной, хотя и не влияет пока на его отображение. Теперь рассмотрим элемент OPTION. Атрибут value задает имя этого элемента, которое используется при пересылке формы; если этого атрибута нет, то именем опции считается содержимое данного элемента. Атрибут selected указывает, что данная опция является выбранной в момент отображения меню. Меню может содержать только одну опцию с этим атрибутом, если у него нет атрибута multiple. Атрибут label задает текст опции, который отображается обозревателем; если этого атрибута нет, то отображается содержимое данного элемента. Атрибут disabled употребляется так же, как в элементе SELECT. Пример меню, содержащего все три описанных элемента: <FORM action="http://mysite.com/cgi-bin/selector" method="post"> <P>Какой обозреватель вы используете? <SELECT name="browser"> <OPTGROUP label="Netscape Navigator"> <OPTION label="4.x или выше">Netscape Navigator 4.x или выше</OPTION> <OPTION label="3.x">Netscape Navigator 3.x</OPTION> <OPTION label="2.x">Netscape Navigator 2.x</OPTION> <OPTION label="1.x">Netscape Navigator 1.x</OPTION> </OPTGROUP> <OPTGROUP label="Microsoft Internet Explorer"> <OPTION label="4.x или выше">Internet Explorer 4.x или выше</OPTION> <OPTION label="3.x">Internet Explorer 3.x</OPTION> <OPTION label="2.x">Internet Explorer 2.x</OPTION> <OPTION label="1.x">Internet Explorer 1.x</OPTION> </OPTGROUP> <OPTGROUP label="Opera"> <OPTION label="3.x или выше">Opera 3.x или выше</OPTION> <OPTION label="2.x">Opera 2.x</OPTION> </OPTGROUP> <OPTION selected="selected">Прочие</OPTION> </SELECT> <INPUT type="submit" value="Send"> <INPUT type="reset"> </P> </FORM> 1.8.6. Многострочное текстовое поле: элемент TEXTAREAСинтаксис: <TEXTAREA> </TEXTAREA> (текстовый элемент) Атрибуты: id, class, style, title, lang, dir, события name = CDATA (имя управляющего элемента) rows = число (количество видимых строк) cols = число (количество видимых столбцов) readonly = readonly (только чтение) disabled = disabled (элемент запрещен) accesskey = символ (имя клавиши быстрого доступа) tabindex = число (номер в порядке нажатия табуляции) onfocus = сценарий (при получении элементом фокуса) onblur = сценарий (при потере элементом фокуса) onselect = сценарий (при выборе текста элемента) onchange = сценарий (при изменении значения элемента) Поддержка: Соответствует стандарту; клавиша, заданная в accesskey, должна нажиматься вместе с Alt (5.0+) Атрибуты readonly, disabled, accesskey и tabindex игнорируются (4.0+) Элемент TEXTAREA создает управляющий элемент формы, предназначенный для многострочного ввода данных пользователем. Его содержимым должен быть обычный текст, включая специальные символы. Он может содержаться в любых блочных и текстовых элементах, кроме BUTTON. Содержимое элемента TEXTAREA задает начальное значение отображаемого текста. При пересылке формы атрибут name задает имя данного управляющего элемента, а текущее содержимое поля ввода его значение. Обязательные атрибуты rows и cols задают, соответственно, количество строк и столбцов окна обозревателя, которое занимает при отображении данный элемент. Эти атрибуты являются скорее рекомендацией обозревателю, чем строгим ограничением; пользователь может ввести больше текста, чем позволяют указанные атрибуты, поэтому обозреватели обеспечивают прокрутку поля ввода по горизонтали и вертикали. Теоретически обозреватели могут принимать ввод текста любого размера, но на практике этот размер обычно ограничен объемом в 32Кб или 64Кб. Необязательный атрибут readonly запрещает изменение первоначального содержимого поля. Атрибут disabled запрещает данный управляющий элемент. Это означает, что элемент не может получить фокус, не доступен путем нажатии табуляции и не может быть успешным. Способ отображения запрещенного элемента зависит от обозревателя. Прочие необязательные атрибуты:
Данный элемент поддерживает обработку следующих нестандартных событий:
Пример использования элемента TEXTAREA приведен в п. 1.8.8. 1.8.7. Метки: элемент LABELСинтаксис: <LABEL> </LABEL> (текстовый элемент) Атрибуты: id, class, style, title, lang, dir, события for = IDREF (идентификатор управляющего элемента) accesskey = символ (имя клавиши быстрого доступа) onfocus = сценарий (при получении элементом фокуса) onblur = сценарий (при потере элементом фокуса) Поддержка: Соответствует стандарту; клавиша, заданная в accesskey, должна нажиматься вместе с Alt (5.0+) Не поддерживается Элемент LABEL создает текстовую метку для управляющего элемента формы. Его содержимым могут быть любые текстовые элементы, кроме LABEL. Он может содержаться в любых блочных и текстовых элементах, кроме BUTTON. Некоторые управляющие элементы, например, кнопки пересылки формы, содержат явные метки, которые задаются их атрибутом label. Элемент LABEL предназначен для присваивания меток тем управляющим элементам, которые этого атрибута не имеют. Каждый элемент LABEL ассоциируется ровно с одним управляющим элементом формы. Это может быть сделано двумя способами:
<FORM action=" " method="post"> <TABLE> <TR> <TD><LABEL for="fname">Имя</LABEL> <TD><INPUT type="text" name="firstname" id="fname"> <TR> <TD><LABEL for="lname">Фамилия</LABEL> <TD><INPUT type="text" name="lastname" id="lname"> </TABLE> </FORM>
<FORM action=" " method="post"> <P> <LABEL>Имя <INPUT type="text" name="firstname"> </LABEL> <LABEL>Фамилия <INPUT type="text" name="lastname"> </LABEL> </P> </FORM> Необязательный атрибут accesskey задает символ Unicode в качестве клавиши быстрого доступа к элементу. Данный элемент поддерживает обработку следующих нестандартных событий:
1.8.8. Группы управляющих элементов: элементы FIELDSET и LEGENDСинтаксис: <FIELDSET> </FIELDSET> (блочный элемент) Атрибуты: id, class, style, title, lang, dir, события Поддержка: Соответствует стандарту (5.0+) Не поддерживается Синтаксис: <LEGEND> </LEGEND> (текстовый элемент) Атрибуты: id, class, style, title, lang, dir, события accesskey = символ (имя клавиши быстрого доступа) Поддержка: Соответствует стандарту; клавиша, заданная в accesskey, должна нажиматься вместе с Alt (5.0+) Не поддерживается Элемент FIELDSET определяет группу управляющих элементов формы. Объединяя взаимосвязанные управляющие элементы в группы, авторы могут разбить форму на несколько частей, облегчая пользователю ее заполнение. Содержимым этого элемента является элемент LEGEND, задающий титул группы элементов, за которым могут следовать любые блочные и/или текстовые элементы, включая другой элемент FIELDSET. Он может содержаться в элементах BLOCKQUOTE, BODY, DD, DEL, DIV, FIELDSET, FORM, IFRAME, INS, LI, MAP, NOFRAMES, NOSCRIPT, OBJECT, TD и TH. Элемент LEGEND задает титул группы элементов. Он может содержать любые текстовые элементы и может употребляться только в начале элемента FIELDSET. Необязательный атрибут accesskey задает символ Unicode в качестве клавиши быстрого доступа к элементу. Пример формы, разбитой на три группы управляющих элементов: <FORM action=" " method="post"> <P> <FIELDSET> <LEGEND>Личная информация</LEGEND> Фамилия: <INPUT name="personal_lastname" type="text" tabindex="1"> Имя: <INPUT name="personal_firstname" type="text" tabindex="2"> Адрес: <INPUT name="personal_address" type="text" tabindex="3"> </FIELDSET> <FIELDSET> <LEGEND>История болезни</LEGEND> <INPUT name="history_illness" type="checkbox" value="Smallpox" tabindex="20"> Оспа <INPUT name="history_illness" type="checkbox" value="Mumps" tabindex="21"> Свинка <INPUT name="history_illness" type="checkbox" value="Dizziness" tabindex="22"> Головокружение <INPUT name="history_illness" type="checkbox" value="Sneezing" tabindex="23"> Кашель </FIELDSET> <FIELDSET> <LEGEND>Текущее лечение</LEGEND> Принимаете ли вы сейчас какие-либо лекарства? <INPUT name="medication_now" type="radio" value="Yes" tabindex="35">Да <INPUT name="medication_now" type="radio" value="No" tabindex="35">Нет Если вы принимаете сейчас лекарства, перечислите их ниже: <TEXTAREA name="current_medication" rows="20" cols="50" tabindex="40"> </TEXTAREA> </FIELDSET> </P> </FORM> Отображаться эта форма будет примерно так: |