Роботландский Университет © А.А.Дуванов

ОБЪЕКТНАЯ МОДЕЛЬ БРАУЗЕРА

i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | ?
урок 7 | зачет | задания | дополнения | урок 9

урок 8: формы (кнопки, строки ввода)

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

принцип программного управления

Для каждого тега внутри гипертекстовой страницы браузер создает объект. Доступ к этому объекту программист получает при помощи имени, которое задается атрибутом name. Таким образом, появляется возможность программного управления тегами.

Пусть, например, в HTML-коде задан тег для вывода на экран картинки:

<IMG src=./pic/ris1.gif border=0 alt="" name=pic>

Браузер строит для этого тега экземпляр стандартного объекта Image с именем pic. Получить к нему доступ можно при помощи эквивалентных конструкций:

window.document.images["pic"]
window.document.images.pic

или, внутри текущего окна:

document.images["pic"]
document.images.pic

Известно, например, что у объекта Image есть свойство src, содержащее указание на файл с картинкой. Можно в программе прочитать это свойство, записав обращение:

document.images.pic.src

Можно, не только прочитать, но и изменить значение этого свойства:

document.images.pic.src = "./pic/ris2.gif";
и картинка на экране соответствующим образом изменится.



команда FORM

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

Все эти интерфейсные элементы выводятся на экран браузера при помощи команды-контейнера <FORM>...</FORM>, а кнопки, поля ввода, флажки и меню задаются внутри этого блока отдельными тегами.

Блок <FORM>...</FORM> называется формой. В открывающем теге можно записывать следующие атрибуты:

атрибут описание
action

Задает адрес для отправки формы по сети. Можно послать форму на сервер, где она будет обработана программой (CGI-скриптом), а можно указать в качестве значения атрибута адрес электронной почты, и форма будет послана по e-mail. Например, можно написать так:

<FORM action="mailto:myaddres@mail.ru">
enctype

Задает кодирование передаваемых по сети данных. В этой книге мы не рассматриваем серверных программ, которые принимают и автоматически обрабатывают полученные из формы данные. Но можно легко устроить так, что браузер пошлет форму, заполненную пользователем, по вашему электронному адресу. Вы эти данные изучите сами или направите на обработку в собственную программу. Все будет хорошо работать, если задать значение атрибута enctype так:

<FORM action="mailto:myaddres@mail.ru"
      enctype="text/plain">
method

Задает способ передачи формы. Атрибут имеет два значения: get и post. Метод post более универсальный. Не вникая в детали работы этих двух методов, предлагаем “магическую” запись, которая заставит браузер послать форму по указанному адресу e-mail:

<FORM action="mailto:myaddres@mail.ru"
      enctype="text/plain"
      method="post">
name

Этот атрибут задает имя формы. Когда имя задано, можно использовать его в скриптах для доступа к полям формы. Если форму посылать никуда не надо, а нужна она для создания диалога с пользователем, то из всех атрибутов потребуется только один — name:

<FORM name="anketa">

Теперь в JavaScript-коде можно обратиться к этой форме так: document.anketa.

Если форма содержит строковое поле с именем work, то можно присвоить содержимое этого поля переменной:

var str = document.anketa.work.value;

Можно изменить значение этого поля:

document.anketa.work.value = "вебмастер";

И экранное отображение поля после этого присваивания соответственно изменится.

посылка формы по e-mail

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

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

Пользователь нажимает кнопку “сброс” и поля принимают значения, установленные по умолчанию. Затем форма заполняется и по нажатию на кнопку “послать заказ” отправляется по адресу myaddres@mail.ru

Обычно браузер не сам отсылает форму, а поручает работу почтовой программе, установленной по умолчанию в операционной системе компьютера (например, Outlook).

Письмо посылается в виде:

Subject: Форма отправлена из Microsoft Internet Explorer
name=Горбунков Семен Семенович
email=gorbun@mail.ru
obj=Программный соковыжиматель

Таким образом, письмо составляется из пар имя=значение, которые выбираются по-порядку из полей формы.

В качестве обратного адреса в письме указывается адрес пользователя компьютера с которого отправляется форма.

Вы можете провести серию опытов, посылая формы самим себе.

Замечание 1. Форма отправляется браузером по электронной почте лишь в том случае, если в его настройках указан соответствующий уровень безопасности.

Замечание 2. Приведенный код наглядно показывает, что внутри блока <FORM>...</FORM> могут располагаться обычные теги HTML.

команда <INPUT>

С помощью тега <INPUT> в форме можно задать разные элементы ввода и управления.

атрибут name

Каждый тег <INPUT> может содержать атрибут name. Значение этого атрибута можно использовать как имя объекта, который браузер создает для этого тега. Пусть, например, задана такая форма:

<FORM name=anketa>
  <INPUT type=text value=крошкосшиватель name=obj>
</FORM>

В программе на JavaScript можно использовать конструкцию document.anketa.obj.value для доступа к свойству value объекта, построенного для тега <INPUT>. Эта запись “расшифровывается” так:

document объект document (родитель — объект window)
document.anketa объект anketa (родитель — объект document)
document.anketa.obj объект obj (родитель — объект anketa)
document.anketa.obj.value cвойство value объекта obj — соответствует атрибуту value тега <INPUT> c именем obj

Можно прочитать значение атрибута value:

var str = document.anketa.obj.value;

А можно и изменить значение этого атрибута:

document.anketa.obj.value = "пылеистребитель";

Такое присваивание приведет к мгновенной перерисовке экрана.

Поле заменится на .

Значение атрибута namе приравнивается к имени переменной, поэтому при выборе названия нужно использовать все правила построения идентификаторов, рассмотренные в уроке 2. В частности, нельзя использовать в имени русские буквы и цифру в качестве первого символа.

Имена, заданные атрибутом namе, должны быть разными внутри одной формы, но могут совпадать с именами полей других форм — браузер не запутается, ведь формы разные и они отображаются в разные объекты.

атрибут type (экранные кнопки)

Конкретный вид интерфейсного элемента <INPUT> задается атрибутом type. Рассмотрим значения этого атрибута, задающие экранные кнопки.

значение описание
reset Задает кнопку, нажатие на которую автоматически возвращает форму в исходное состояние (все поля ввода формы принимают значения, установленные по умолчанию).

<INPUT type=reset value=сброс>
Атрибут value задает надпись на кнопке.
submit Задает кнопку, нажатие на которую отправляет форму в сеть.

<INPUT type=submit value=послать>
Атрибут value задает надпись на кнопке.
button Задает обычную кнопку. Нажатие на эту кнопку для браузера ничего не означает (если, конечно, не задана программа обработки нажатия в атрибуте onclick).

<INPUT type=button value="нажми меня">
Атрибут value задает надпись на кнопке.

программное управление

Объект, построенный браузером для тега <INPUT type=button> (или тегов <INPUT type=submit>, <INPUT type=reset>) имеет свойство value, которое соответствует одноименному атрибуту тега.

Ниже приводится пример, демонстрирующий работу с этим свойством.

Поработайте с экранными кнопками и разберитесь в алгоритме работы программы.

Можно упростить обращение к полям формы, если использовать указание this — ссылку на текущий экземпляр объекта и указание this.form — ссылку на объект, построенный для текущей формы:

Как видите, в этом коде не потребовалось имя для формы. Синонимом имени внутри формы оказалась конструкция this.form.

А внутри второго тега <INPUT> не потребовалось имя этого тега, вместо него использован синоним this.

Замечание. Объект, построенный для любого элемента управления или ввода, содержит свойство form, являющееся указателем на объект-форму, содержащий этот элемент.

атрибут type (строка ввода)

Значения text и password для атрибута type тега <INPUT type=... > задает строку ввода.

значение описание
text

Обычная строка ввода. Дополнительные атрибуты:

  • Атрибут value задает значение поля ввода по умолчанию (именно это значение восстанавливается, когда пользователь нажимает кнопку <INPUT type=reset>.
  • Атрибут size задает размер поля в символах. Если атрибут опущен, размер поля определяется длиной строки, заданной как значение атрибута value.
  • Атрибут maxlength задает максимальную длину строки, которую можно вписать в поле ввода. Если атрибут пропущен, длина не ограничена.
  • Атрибут readonly определяет строку “только для чтения”. Такую строку пользователь не может редактировать.

<INPUT type=text value=Варвара size=10 maxlength=15>

password

Строка для “секретного” ввода. От значения text отличается только тем, что символы на экране при вводе отображаются звездочками. Секретная строка не копируется в буфер обмена.

<INPUT type=password value="" size=5 maxlength=5>

программное управление

Объект, построенный браузером для тега <INPUT type=text> (или <INPUT type=password>) имеет следующие свойства:

value текущее содержание строки ввода;
defaultvalue значение атрибута value в соответствующем теге <INPUT>

Следующий скрипт иллюстрирует смысл свойств value и defaultValue.


пример

Поработайте на этом стенде и по приведенному ниже коду разберитесь, как он устроен.

Введите пароль и нажмите “пуск”.
Пароль:
 


Дополнительный материал

зачетный класс Зачетный класс здесь.

 

задания

  1. Напишите приложение — зачетный класс, по какой либо теме, например, по географии или информатике. Приложение может иметь вид, представленный на рисунке.

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

    Нажмите “сброс” и приступайте к решению.


    1. Сколько будет 2x2?
    2. Сколько будет 10:2?
    3. ...

    Чтобы увидеть результаты работы, нажмите кнопку “оценка”.


  2. Развитие предыдущей темы. Напишите приложение — зачетный класс с подсказками, которые отображаются в новом окне браузера.

    Нажмите “сброс” и приступайте к решению. Вы можете пользоваться подсказкой, но это снижают оценку!


    1. Как называется устройство, при помощи которого компьютер передает и принимает информацию по телефонной сети?
    2. Как называется узел иерархии сетевых адресов?
    3. ...

    Чтобы увидеть результаты работы, нажмите кнопку “оценка”.

  3. Создайте экзамен по какой-либо теме. Возможный интерфейс этой программы представлен ниже.
    Экзамен

    Вопрос Бонус
    Ответ
  4. Создайте вариант Угадайки на формах. Возможный интерфейс представлен здесь.

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

  6. Правилка считает пробелы в начале и конце строки ввода ошибкой. Исправьте эту погрешность.

  7. Увеличьте в Правилке число “званий” и соответствующее им число картинок, которые эти звания иллюстрируют.

 

содержание урок 7 урок 9 письмо автору об авторах