6.1. Рлемент FORM
6.2. Создание полей формы
Что главное РІ Рнтернете? Его интерактивность. Можно общаться СЃ посетителями сайта Рё получать РѕС‚ РЅРёС… отзывы Рѕ работе – такое взаимодействие всегда полезно Рё интересно. Создатели сайта узнают, насколько РѕРЅ интересен посетителям, Рё РјРѕРіСѓС‚ изменить его РІ лучшую сторону, Р° посетители получают возможность участвовать РІ жизни сайта, общаться РґСЂСѓРі СЃ РґСЂСѓРіРѕРј Рё СЃ его создателями.
В этой главе мы рассмотрим объект, который помогает организовать взаимодействие пользователя с авторами сайта, – формы. Формы позволяют получать информацию о посетителях – любая информация, введенная в форму, может быть отправлена создателю сайта.
Формы напоминают анкеты, в них есть возможность создавать поля, в которые пользователь сам может ввести любую информацию, и поля-списки, где ему нужно выбрать ответ из вариантов, предложенных автором. Возможности форм по группировке и представлению информации позволяют разместить ее наилучшим образом. В умелых руках это мощный и полезный инструмент.
Главное при создании форм – следить за тем, чтобы предложенные вами поля были удобны для посетителей и приемлемы для ответов на ваши вопросы.
Технически формы передают данные РѕС‚ пользователя удаленному серверу. Рто позволяет создавать системы регистрации пользователей, форумы, гостевые РєРЅРёРіРё. Для получения Рё обработки данных форм используются языки веб-программирования (PHP, Perl), РЅРѕ РјС‹ РЅРµ касаемся РёС… РІ этой РєРЅРёРіРµ. Хотя Рё придется рассмотреть моменты, имеющие отношение Рє программированию, сконцентрируемся РЅР° тех особенностях Рё возможностях форм, которые пригодятся дизайнеру, чтобы грамотно Рё СѓРґРѕР±РЅРѕ расставлять РёС… РЅР° странице.
6.1. Рлемент FORM
Основой любой формы служит элемент FORM, требующий наличия закрывающего тега. Атрибуты этого элемента содержат информацию, общую для всех полей формы. На самом деле в одну форму надо включать поля, объединенные логически, потому что в один момент на сервер можно отправить только одну форму.
Большинство атрибутов этого элемента влияют на обработку формы, а не на ее внешний вид. Однако необходимо знать, для чего они предназначены, чтобы понимать, как связать форму с кодом.
Главным для рассматриваемого элемента является атрибут action, указывающий обработчик данных для формы. Обработчик – это файл, в котором описано, что нужно делать с данными формы. Создать этот файл – дело программиста, однако переменные, которые будут туда передаваться (их имена и возможные значения), зависят от тех, кто описывает форму. Сам обработчик может быть написан на любом языке, например это может быть файл test.php, как в примере из листинга 6.1. Если значение атрибута action не будет указано, то страница перезагрузится, а все элементы формы примут значения, заданные по умолчанию, то есть в этом случае форма окажется абсолютно бесполезной. В качестве значения данного атрибута надо указать URL-путь к файлу-обработчику на сервере.
Рассмотрим пример из листинга 6.1. Файл обработки находится по адресу test. php, именно ему и будут переданы все данные, введенные в форму.
Листинг 6.1. Атрибут action элемента FORM
Сам файл test.php может делать с данными что угодно, например занести их в базу или отправить вам по почте. В общем, в том, что касается обработки данных, возможностей много, а реализуются они очень просто: дайте команду вашему программисту. Никаких усилий с вашей стороны.
Что же делать, если программиста нет, а получить данные от пользователя нужно? Можно сделать так, чтобы заполненная посетителем форма приходила вам на почту. Для этого надо в качестве значения атрибута action указать электронный адрес, на который должна приходить форма, начав с ключевого слова mailto. Для корректной обработки данных в этом случае необходимо указать значение атрибута enctype="text/plain".
В листинге 6.2 приведен пример того, как можно отправить данные по электронной почте. При отправке формы откроется почтовый клиент, установленный на компьютере пользователя, и появится предложение отправить данные формы в письме.
Листинг 6.2. Отправка данных формы по почте
Р’ РїРёСЃСЊРјРµ будет отправлен текстовый файл, РІ котором названиям полей формы Р±СѓРґСѓС‚ присвоены значения, которые ввел посетитель. Рначе РіРѕРІРѕСЂСЏ, вам придет текст такого РІРёРґР°:
название_поля=значение_введенное_посетителем
Вообще атрибут enctype используют для указания MIME-типа данных, отправляемых вместе СЃ формой. Рспользовать этот атрибут обязательно только РІ случае отправки файла через форму, тогда значение атрибута должно быть multipart/ form-data.
В листинге 6.3 показан вариант задания атрибута enctype, когда через форму будет отправляться файл.
Листинг 6.3. Атрибут enctype элемента FORM
Отправка файлов – важная возможность форм, потому что вместо ввода информации вручную пользователь может просто отправить вам файл, в котором будет содержаться необходимая информация.
Еще одним обязательным атрибутом является атрибут method, который задает то, как будет передаваться форма. При выборе метода отправки формы нужно ориентироваться на данные, которые необходимо отправить вместе с ней. Основную роль играет объем данных.
Существуют два основных метода: GET и POST. Рассмотрим применение каждого из них.
• GET – это наиболее распространенный метод, который применяется для получения данных СЃ сервера. Р’ методе GET данные РЅР° сервер передаются через адресную строку браузера. РћРЅ же вызывается, РєРѕРіРґР° РІС‹ вводите адрес сайта РІ адресной строке или щелкаете РєРЅРѕРїРєРѕР№ мыши РЅР° ссылке. Р’ этом методе РїСЂРё формировании запроса Рє серверу РІСЃРµ переменные Рё РёС… значения формируют последовательность РІРёРґР° . Рными словами, имена Рё значения переменных присоединяются Рє адресу сервера после знака? и разделяются знаком &.
Ртот метод нужно использовать, если РІС‹ РЅРµ передаете больших объемов информации. Если же вместе СЃ формой РІС‹ хотите переслать РЅР° сервер файл, этот метод РЅРµ подойдет.
• POST – применяется для отправки данных РЅР° сервер. Данные, отправляемые СЃ помощью этого метода, РЅРµ РІРёРґРЅС‹ РІ заголовке URL, поскольку РѕРЅРё содержатся РІ теле сообщения. Рменно поэтому метод POST РїРѕРґС…РѕРґРёС‚ для отправки больших объемов информации.
В листинге 6.4 для отправки формы выбран метод POST, потому что вместе с формой нужно передать файлы.
Листинг 6.4. Атрибут method элемента FORM
Форма готова для передачи файлов и больших объемов информации.
Теперь, чтобы позволить программисту управлять формой, надо задать ее имя. Для этого нужно использовать атрибут name. С его помощью можно указать уникальное имя формы, которое будет использоваться для доступа к элементам формы через сценарии.
В листинге 6.5 показан пример задания имени формы. Теперь открыт доступ к форме через сценарии.
Листинг 6.5. Атрибут name элемента FORM
Было задано логичное и понятное имя для формы.
Совет
Старайтесь делать логичными имена форм и всех полей. Учтите, что программисту, который будет писать вам обработчик, придется использовать их многократно. Согласуйте с программистом правила создания имен, что сэкономит и ваше, и его время.
Р’РѕС‚ РјС‹ добрались РґРѕ единственного атрибута, который РЅРµ заинтересует программистов, зато пригодится нам. Рто атрибут target. Рменно РѕРЅ указывает РЅР° то, РІ каком РѕРєРЅРµ выводить результат обработки формы. Над этим стоит задуматься, потому что РЅРµ всегда будет СѓРґРѕР±РЅРѕ выводить результат обработки формы РІ то же РѕРєРЅРѕ, РіРґРµ была сама форма.
Рассмотрим значения параметра target.
• _blank – загружает страницу в новое окно браузера.
• _self – загружает страницу в текущее окно.
• _parent – загружает страницу во фрейм-родитель. Если фреймов нет, то работает как _self.
• _top – отменяет все фреймы и загружает страницу в полном окне браузера. Если фреймов нет, то работает как _self.
В листинге 6.6 представлен пример кода, который после обработки страницы будет загружать результат в новом окне браузера.
Листинг 6.6. Атрибут target элемента FORM
Открывать результаты в новом окне удобно, например, когда создается форма для поиска.
С элементом FORM мы разобрались: рассмотрели его основные атрибуты. Большинство атрибутов отвечают за параметры обработки формы и за ее общие настройки.
Кстати, если вы пробовали вывести код любого листинга из представленных выше и посмотреть, как он выглядит в браузере, то наверняка удивились, что увидели только белую страницу. Как говорилось выше, элемент FORM логически объединяет поля таблицы, сами же поля создаются с помощью других элементов, которые мы и рассмотрим дальше.
6.2. Создание полей формы
Теперь приступим к самому интересному – к созданию полей для форм. Полей, из которых можно составить форму, очень много, поэтому надо внимательно следить за выбором поля для представления конкретной информации. Говоря о каждом из видов, мы будем рассматривать, в каких случаях его можно использовать. Ведь есть поля с похожими функциями, разница будет только в удобстве применения конкретного поля в конкретной ситуации.
Общие атрибуты элемента INPUT
Большинство полей для формы создается с помощью элемента INPUT. Атрибуты элемента отличаются в зависимости от поля, для создания которого используется этот элемент. Тем не менее есть атрибуты, которые можно, а некоторые даже нужно применять вне зависимости от типа поля.
Начнем с главного атрибута, который, собственно, и задает поле, – с атрибута type. Он принимает значение, указывающее на тип поля. В табл. 6.1 описано, какое значение может принимать атрибут и какому полю оно соответствует. Дальше мы подробно рассмотрим каждый тип поля и атрибуты, которые могут применяться вместе с ним.
Таблица 6.1. Значения атрибута type
В таблице поля описаны кратко, подробно мы их рассмотрим позже, но теперь у вас есть некоторое представление о возможностях элемента INPUT.
Следующий атрибут, который РјС‹ рассмотрим, является обязательным Рё называется name. Его значение задает уникальное РёРјСЏ поля. Введенная пользователем информация будет передаваться обработчику РІ качестве значения переменной СЃ именем поля. Ртот атрибут имеет значение для программистов, поэтому РёРјСЏ должно быть логичным.
РРЅРѕРіРґР° бывает нужно запретить пользователю изменение данных поля, например, чтобы РѕРЅ РЅРµ СЃРјРѕРі поменять уже введенную информацию. Чтобы запретить изменение данных, РІ любое поле можно добавить атрибут disabled. РџСЂРё этом поле РЅРµ просто нельзя будет поменять, его невозможно даже взять РІ фокус.
Атрибут value задает значение, которое будет передано обработчику. РџРѕ сути, РѕРЅ определяет данные, введенные РІ поле. Для текстовых полей СЃ помощью этого атрибута можно установить значение РїРѕ умолчанию. Введя РІ поле значение РїРѕ умолчанию, можно пояснить пользователю, какие данные Рё РІ каком формате РІС‹ хотите здесь видеть. Рто как образец: гораздо удобнее заполнять форму, РІРёРґСЏ перед СЃРѕР±РѕР№ пример.
Для полей, предоставляющих возможность выбора, атрибут value определяет, какое значение будет передано обработчику при выборе конкретного пункта. В таком случае важно, чтобы значения этого параметра логически соответствовали пунктам, из которых можно выбирать. Помните о том, что с этими данными придется работать другим людям.
Рассмотренные выше атрибуты можно применять в любых полях, они всегда будут действовать. Теперь пора разобраться с самими полями. Начнем с текстового поля.
Текстовые поля
Без ввода текста никак не обойтись, потому что без него потеряется смысл создания формы. Рассмотрим поля для ввода текста в одну строку, для многострочного ввода служат другие элементы, которые мы разберем позже. Однострочное поле удобно для ввода имени, пароля и любой другой короткой информации.
Для создания текстового поля указываем значение атрибута TYPE="text". Вместе СЃ этим атрибутом можно использовать атрибут maxlenght, значение которого определяет максимальное количество символов, которые можно ввести РІ данную строку. Ртот атрибут имеет смысл применять, например, чтобы злоумышленник РЅРµ СЃРјРѕРі засорить базу бессмысленными строками большой длины. Однако выбирать значение этого атрибута надо осторожно, чтобы Сѓ честного пользователя РЅРµ возникло проблем СЃ РІРІРѕРґРѕРј информации.
Можно также задать длину поля ввода, используя атрибут size. Следить за длиной поля важно, потому что при вводе строки большой длины пользователю удобно видеть ее целиком. Рнаоборот, нет необходимости оставлять большое поле, если надо ввести один или два символа, – это будет неудобно. Таким образом, над размерами поля для ввода текста нужно подумать.
Внимание!
РЁРёСЂРёРЅР° текстового поля определяется количеством символов моноширинного шрифта, то есть РѕРЅР° задается количеством стоящих СЂСЏРґРѕРј Р±СѓРєРІ одинаковой ширины. Если размер шрифта изменяется СЃ помощью стилей, то ширина также соответственно меняется. Рто справедливо для всех текстовых полей РІ формах.
В листинге 6.7 приведен пример полей для ввода основной информации о посетителе. Для поля Введите логин мы использовали атрибут maxlenght и ограничили его по количеству знаков, для других полей ограничений нет. Атрибут size нет необходимости использовать, так как все поля имеют размер, адекватный информации, которую в них нужно ввести. Для всех полей заданы значения по умолчанию, которые поясняют, какую информацию требуется ввести.
Листинг 6.7. Создание поля для ввода текста
Результат обработки листинга 6.7 показан на рис. 6.1.
Рис. 6.1. Текстовые поля для ввода данных о пользователе
Теперь у вас есть первые четыре поля для ввода данных о посетителе. Пользователю нужно придумать имя для входа и, соответственно, пароль.
Поле для ввода пароля
Чтобы создать поле для ввода пароля, задаем значение атрибута type="password". Особенность этого поля в том, что все введенные буквы закрываются звездочками (или точками, в зависимости от системы) и увидеть вводимый пароль невозможно.
Вместе с этим полем можно использовать те же атрибуты, что и для строки ввода текста, то есть maxlenght и size.
В листинге 6.8 представлен пример создания поля для ввода пароля.
Листинг 6.8. Создание поля для ввода пароля
Результат обработки браузером кода из листинга 6.8 представлен на рис. 6.2.
Рис. 6.2. Поле для ввода пароля
На рис. 6.2 видно, что вместо текста в поле ввода видны точки – теперь пароль нельзя узнать.
После ввода личной информации пользователь должен отправить ее на сервер. Для этого служит инструмент, который мы рассмотрим дальше.
РљРЅРѕРїРєРё
При создании формы без кнопок не обойтись: с их помощью можно отправить, очистить или отредактировать форму. В общем, кнопки необходимы. Мы можем создавать разные кнопки, в зависимости от того, что нужно сделать с формой.
Чтобы создать обычную кнопку, присваиваем атрибуту type значение «button». Если надо создать кнопку, которая будет отправлять форму обработчику, устанавливаем type="submit", а если создаем кнопку, очищающую форму, то type="reset".
Думаю, необходимость наличия в любой форме кнопок очевидна, без них элементарно невозможно будет отправить данные обработчику. Чаще всего создаются две кнопки: для отправки данных и для очистки формы. Для большинства форм такого набора достаточно.
Значение атрибута value задает надпись на кнопке, что очень полезно, потому что надписи по умолчанию очень скучные.
В примере из листинга 6.9 описано создание кнопок с разными надписями.
Листинг 6.9. Создание кнопок
Результат обработки кода из листинга 6.9 показан на рис. 6.3.
Рис. 6.3. Кнопки с разными надписями
Видно, что надписи по умолчанию могут быть не очень понятны посетителю сайта, причем они могут различаться в зависимости от системы пользователя. Для нашей формы выберем второй вариант кнопок, так как он самый понятный и лаконичный.
У нас есть готовая маленькая форма, но, думаю, можно получить еще немного информации о пользователе. Для этого добавим еще поля.
Переключатели
Если вы задаете посетителю вопрос и уверены, что знаете все возможные варианты ответа на него, а также хотите, чтобы посетитель выбрал только один из предложенных вами вариантов, используйте переключатель. Только убедитесь, что действительно предоставили пользователю все возможные варианты ответов.
Совет
Даже если вам кажется, что вы придумали все возможные ответы, учтите: посетители сайта хитры и могут придумать то, что не пришло в голову вам. Поэтому предусматривайте поле с вариантом ответа Другое. А еще посетитель может не захотеть отвечать на ваш вопрос, для такого случая надо добавить пункт Не хочу отвечать.
Для создания переключателя устанавливаем type="radio" и получаем симпатичный кружочек. Текст пункта вводится рядом с тегом . Особенность переключателя в том, что можно выбрать только одно положение из всех возможных. Для всех переключателей, которые принадлежат к одной группе, должно быть установлено одинаковое значение атрибута name. Атрибут value в этом случае содержит значение, которое будет передано обработчику, если пользователь выберет указанное положение.
Вместе СЃ переключателями можно использовать атрибут checked, который задает положение, выбранное РїРѕ умолчанию. Рто СѓРґРѕР±РЅРѕ, если РІС‹ знаете самый частый вариант ответа РЅР° заданный РІРѕРїСЂРѕСЃ. Р’ таком случае, установив этот вариант РїРѕ СѓРјРѕР» – чанию, РІС‹ упростите процесс заполнения формы для посетителей вашего сайта.
В листинге 6.10 представлен пример создания различных вариантов переключателей.
Листинг 6.10. Создание переключателей
Результат обработки кода из листинга 6.10 представлен на рис. 6.4.
Рис. 6.4. Переключатели
Для создания опроса с переключателями мы выбрали вопросы, ответы на которые можно предположить. Один из вариантов ответа мы назначили выбранным по умолчанию, что видно на рис. 6.4.
Следующий элемент поможет вам, когда можно позволить посетителю выбрать несколько вариантов ответов из всех предложенных.
Флажки
Флажки напоминают переключатели тем, что дают пользователю возможность выбирать из предложенных вами вариантов. Главным отличием является то, что посетитель может выбрать сразу несколько пунктов, а сами пункты обозначаются квадратиками, а не кружочками.
В группы эти элементы объединяются также присваиванием одинакового имени всем полям. Получать значения от таких полей труднее, потому что в одной группе может быть много выбранных пунктов.
Примечание
Для получения значений из полей форм, в которых возможен множественный выбор, в качестве имени поля используют массив.
Для флажков можно использовать атрибут checked, который здесь можно установить для нескольких пунктов.
В листинге 6.11 приведен пример создания опроса с флажками. Заданы несколько выбранных по умолчанию вариантов ответа.
Листинг 6.11. Создание флажков
Результат обработки браузером кода из листинга 6.11 приведен на рис. 6.5.
Рис. 6.5. Флажки
Теперь у вас достаточно данных о посетителе. Можно дать ему возможность отправить вам свое фото.
Поле для ввода файла
Возможность отправлять файлы РЅР° сервер очень помогает РІ работе. Посетители РјРѕРіСѓС‚ загрузить СЃРІРѕРё фотографии, СЂРёСЃСѓРЅРєРё или видео. Рто помогает создателю сайта взаимодействовать СЃ посетителями, Р° посетителям взаимодействовать РґСЂСѓРі СЃ РґСЂСѓРіРѕРј.
Для создания поля отправки файла надо установить значение атрибута type= «file». Особенность этого поля в том, что справа появляется кнопка, при нажатии которой пользователь сможет выбрать загружаемый файл через Проводник, что гораздо удобнее, чем вводить путь до файла вручную.
Вместе с этим полем можно использовать атрибут size, что весьма актуально. При длинном пути к файлу посетителю удобнее видеть весь адрес целиком, поэтому длину строки можно установить достаточно большой.
В листинге 6.12 показан пример создания поля размером 35 символов для ввода файла.
Листинг 6.12. Создание поля для загрузки файла
Результат обработки кода из листинга 6.12 показан на рис. 6.6 – создано поле выбора и отправки файла.
Рис. 6.6. Поле для выбора файла
У вас уже достаточно полная форма, теперь можно подумать о том, как сделать ее красочнее.
Создание картинок
РЎ помощью картинок можно украсить форму. РС… можно использовать РІ качестве РєРЅРѕРїРѕРє. Для задания РєРЅРѕРїРєРё-картинки указываем type="image". РџСЂРё этом необходимо задать атрибут src. Его значение – адрес картинки РЅР° сервере.
Получается очень симпатичный вид формы, но надо следить за размером картинки, чтобы графические кнопки не оказались больше самой формы.
Для полей картинок можно использовать атрибут alt, который задает альтернативный текст, всплывающий при наведении указателя мыши на изображение. Обязательно используйте этот атрибут, потому что, если у посетителя отключена загрузка картинок, это будет единственная возможность сообщить ему, куда надо нажать для отправки формы.
Можно задать положение картинки на странице относительно текста с помощью атрибута align. Множество значений этого атрибута позволит вам выровнять изображение как угодно.
Значения атрибута align:
• left – по левому краю;
• right – по правому краю;
• top – выравнивание верхней границы картинки по самому высокому элементу строки;
• texttop – выравнивание верхней границы картинки по самому высокому элементу текста;
• middle – середина изображения выравнивается по базовой линии строки;
• absmiddle – середина изображения выравнивается по середине строки;
• baseline – выравнивание нижней границы изображения по базовой линии строки;
• bottom – выравнивание нижней границы изображения по окружающему тексту.
В листинге 6.13 представлен пример создания кнопок-картинок, которые предварительно нарисованы в графическом редакторе. Для них задано выравнивание и альтернативный текст.
Листинг 6.13. Создание графических кнопок
Результат обработки браузером кода из листинга 6.13 показан на рис. 6.7.
Рис. 6.7. Графические кнопки
Нарисованные кнопки оживят вид вашей формы.
Скрытые поля
Вместе с формой можно передавать дополнительную информацию, которая не должна быть видна пользователю.
Для передачи служебной информации используются скрытые поля. РћРЅРё РЅРµ РІРёРґРЅС‹ пользователю, однако информация РёР· РЅРёС… передается обработчику. Такая информация часто РЅРѕСЃРёС‚ служебный характер Рё РЅРµ связана СЃ данными, вводимыми пользователем. Рто может быть, например, идентификатор посетителя РІ базе данных.
Для создания скрытого поля указывается значение атрибута type="hidden". Для него нужны только атрибуты name и value – имя и значение переменной, передаваемые обработчику.
В листинге 6.14 представлен пример создания скрытого поля, в котором вы можете передавать идентификатор пользователя.
Листинг 6.14. Скрытые поля
Мы разобрались со всеми возможностями элемента INPUT. Дальше рассмотрим поля, которые входят в форму, но создаются с помощью других элементов.
РЎРїРёСЃРєРё
Списки дают возможность расположить большое количество пунктов компактно. При создании списков вы сами можете определить количество видимых элементов. Можно настроить возможность выбора одного или нескольких пунктов. По функциям списки напоминают переключатели и флажки, однако их плюс в компактности. С другой стороны, поиск по спискам занимает больше времени, хотя можно задать элементы, выбранные по умолчанию. В общем, советую использовать списки там, где много перечисляемых пунктов, или ориентироваться относительно дизайна и выбирать тот вариант, который лучше впишется в вашу страницу.
Для создания списков используется элемент SELECT, у которого два атрибута, отвечающих за общее отображение списка. Атрибут size устанавливает количество видимых элементов из списка. Если size="1" и при этом количество элементов списка больше одного, то появится раскрывающийся список выбора. Если size больше единицы, то при количестве пунктов списка, превышающем его размер, появится полоса прокрутки, а если пунктов меньше, то в поле останется пустое место. Атрибут multiple дает возможность выбирать несколько элементов из списка, для этого при выборе надо нажать и удерживать нажатой клавишу Ctrl.
Если же добавить на страницу элемент
Области работы (можно выбрать несколько):
Результат обработки листинга 6.15 представлен на рис. 6.8.
Р РёСЃ.В 6.8. РЎРїРёСЃРєРё
Теперь попробуем систематизировать и уточнить наши списки, чтобы посетителю было проще найти нужный пункт. В этом нам поможет элемент OPTGROUP, который создает заголовки в списках. У него есть единственный атрибут label, в котором указывается текст заголовка.
В листинге 6.16 показан пример создания списка с заголовками.
Листинг 6.16. Рспользование элемента OPTGROUP
Результат обработки браузером кода из листинга 6.16 представлен на рис. 6.9.
Рис. 6.9. Группы в списках
На рис. 6.9 видно, что списки стали гораздо удобнее, теперь посетителю проще найти нужный пункт.
Подобные элементы, конечно, не являются обязательными, но надо заботиться о тех, кто заполняет форму. Деление списков на группы поможет пользователям сэкономить время и с легкостью найти нужный пункт.
Есть только один недостаток – все эти списки и маленькие поля ограничивают простор фантазии посетителя, но это можно исправить.
Большие текстовые поля
Большие текстовые поля дадут посетителю возможность проявить свое творческое начало. В них можно писать что угодно в любых количествах. Такая конструкция совершенно необходима, размеров обычного текстового поля не хватит для ввода текста большого объема. В больших полях можно вводить комментарии, сообщения и многое другое.
Для создания таких полей применяется элемент TEXTAREA, который обязательно должен иметь закрывающий тег. Текст, вводимый по умолчанию, находится между открывающим и закрывающим тегами этого элемента. Размеры поля устанавливаются с помощью атрибутов cols и rows. Первый задает размеры по горизонтали, второй – по вертикали. Помните, что все размеры в формах считаются исходя из размера одного символа моноширинного шрифта.
Можно запретить пользователю изменять текст в текстовом поле, что пригодится, если поле используется, например, для представления договора. Запрет вводится путем установки атрибута readonly.
Еще РѕРґРёРЅ атрибут элемента TEXTAREA – wrap, указывающий браузеру, как осуществляется перенос текста Рё РІ каком РІРёРґРµ текст отправляется РЅР° сервер. Ртот атрибут может принимать три значения:
• hard – автоматически переносит строку, когда она доходит до границы окна ввода, и передает на сервер с такой расстановкой переносов;
• soft – переносит строку автоматически, но на сервер знак переноса передает только в том месте, где была нажата клавиша Enter;
• off – переносит слова только при нажатии клавиши Enter, и, если строка превышает горизонтальный размер окна, появляется полоса прокрутки.
В листинге 6.17 представлен пример создания больших текстовых полей. Первое поле с горизонтальной полосой прокрутки, второе – только для чтения.
Листинг 6.17. Создание больших текстовых полей
Результат обработки кода из листинга 6.17 приведен на рис. 6.10.
Рис. 6.10. Большие текстовые поля
Очевидно, что такие поля – единственная возможность для ввода больших объемов текста, поэтому от их использования в форме никуда не деться.
Все возможные поля для формы готовы, осталось добавить несколько мелочей. Возможности, которые мы рассмотрим дальше, необязательно использовать, но с ними формы становятся намного удобнее.
Дополнительные удобства
Есть элементы, которые не очень сильно влияют на вид формы, но при этом делают работу с ней намного удобнее. Примером может служить элемент LABEL, который применяется при реализации выбора с помощью переключателей и флажков. Он необходим, чтобы вы могли выбрать нужный пункт, просто щелкая кнопкой мыши на тексте, связанном с ним. Без использования этого элемента посетителю приходится щелкать кнопкой мыши на кружочке или квадратике, хотя просто щелкнуть кнопкой мыши на тексте намного удобнее. Тем более становится неважно, где находится текст – при щелчке на нем кнопкой мыши будет выбран связанный с ним пункт меню.
Рспользование этого элемента РїСЂРё работе СЃ переключателями Рё флажками – самый распространенный вариант, однако это РЅРµ ограничение. РЎ таким же успехом можно связать текст СЃ любым элементом формы, Рё РїСЂРё щелчке РєРЅРѕРїРєРѕР№ мыши РЅР° тексте связанный элемент автоматически берется РІ фокус.
Связывание текста с элементом формы осуществляется просто: вы устанавливаете атрибут id элемента INPUT, а затем берете в элемент LABEL нужный текст и присваиваете атрибуту for этого элемента значение, совпадающее со значением id для элемента INPUT того поля, с которым хотите связать текст.
У элемента LABEL есть еще один замечательный атрибут – accesskey. Его значение устанавливает горячую клавишу для соответствующего элемента формы. Надо нажимать эту клавишу вместе с клавишей Alt, и фокус автоматически переместится на нужное поле.
В листинге 6.18 показан пример использования элемента LABEL.
Листинг 6.18. Рспользование элемента LABEL
Как видно, использование элемента LABEL может сильно упростить работу посетителей сайта.
Осталось совсем немного: для большей наглядности сгруппируем вопросы из нашей формы по темам и составим наконец общую форму. В этом нам поможет элемент FIELDSET, который объединит поля формы, находящиеся внутри его контейнера, рамкой. У этого элемента есть атрибут title, который задает всплывающую подсказку для группы.
Чтобы добавить заголовок для каждой группы, понадобится элемент LEGENG, который задает встраиваемый в рамку текст заголовка группы. У элемента LEGEND два атрибута: align задает выравнивание заголовка, а title – всплывающую подсказку к тексту заголовка. Возможностей выравнивания немного, но достаточно.
Значения параметра align:
• right – по правому краю;
• left – по левому краю;
• center – по центру.
В листинге 6.19 показан итоговый код формы регистрации. В нем объединены все рассмотренные элементы.
Листинг 6.19. Форма регистрации
Фрагмент формы регистрации с объединением полей в группы показан на рис. 6.11.
Рис. 6.11. Фрагмент итоговой формы
На рис. 6.11 видно, что после объединения полей в группы форма стала намного удобнее и логичнее.
Резюме
РњС‹ рассмотрели РІСЃРµ возможности построения форм Рё создали достаточно большую форму регистрации. Возможности, которые предоставляют формы, очень велики. Рто главный инструмент общения пользователей РІ Рнтернете. Рспользование форм РЅР° сайте позволяет иметь обратную СЃРІСЏР·СЊ СЃ посетителями, Р° также расширить функциональность сайта.