10. JavaScript и Forms.
Структуры form при программировании на языке JavaScript приобретают особое значение.10.1. Создание Form
. Главное отличие прямого создания form средствами HTML и расширенными средствами JavaScript заключается в включении обработчиков событий в структуру form. Они вызываются при выполнении различного рода манипуляций с элементами form . Внутри тегов <FORM> включаемые "on..." обработчики событий невидимы устаревшими браузерами, которые JavaScript не поддерживают. Заметим также, что в JavaScript структуры типа form, рассматриваются как объекты.<FORM NAME="myform" ACTION="" METHOD="GET">
Enter something in the
box:<BR>
<INPUT TYPE="text" NAME="inputbox"
VALUE=""><P>
<INPUT TYPE="button" NAME="button" Value="Click"
onClick="testResults(this.form)">
</FORM>
- FORM NAME="myform" задает имя
form. Повсюду в программе JavaScript можно обращаться к данной form по имени myform.10.2. Получение значений из form объектов
.Ниже приведена скрипт-программа создания и обработки
form объекта. После ввода строки текста в поле ввода с именем "inputbox" и нажатии кнопки мыши в поле с именем "button" будет вызвана программа обработчика событий - функция testResults().<HTML> Функция
<HEAD>
<TITLE>Test Input
</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function
testResult(form){
var TestVar = form.inputbox.value;
alert ("You typed: "
+ TestVar);
}
</SCRIPT>
</HEAD>
<BODY>
<FORM
NAME="myform" ACTION="" METHOD="GET">
Enter something in the
box:<BR>
<INPUT TYPE="text" NAME="inputbox"
VALUE=""><P>
<INPUT TYPE="button" NAME="button" Value="Click"
onClick="testResults(this.form)">
</FORM>
</BODY>
</HTML>
var TestVar = form.inputbox.value
Заметим, что это содержимое поля ввода является свойством типа
value объекта с именем inputbox, входящего в объект типа form.Строго говоря, необязательно было передавать объект
form функции в качестве параметра. Поскольку этот объект имеет имя myform, его можно рассматривать в явном виде как элемент объекта document. И тогда оператор присваивания мог выглядеть следующим образом:var TestVar = document.myform.inputbox.value;
10.3. Установка значений в form объектах.Поля ввода (свойства типа
value), подобных в вышеприведенном примере полю inputbox, одновременно предназначены и для чтения, и для записи информации. Операция записи и является прцедурой установки значения.Пример:
<HTML>Действия программы:
- при нажатии кнопки "
Read" JavaScript вызывает функцию readText(), которая читает и высвечивает введенную в поле ввода текстовую строку,10.4. Чтение другого типа значений в объектах form.
Поле ввода типа
text является одним из наиболее употребимым объектом для чтения и записи информации. Тем не менее, применяются операции чтения-записи значений и для других объектов в form: - Hidden поле
(TYPE="hidden"),
-
Radio кнопки (TYPE="radio"),
- Check поле
(TYPE="checkbox"),
- Text
area поле (<TEXT
AREA>),
- Списки
меню (<SELECT>).
Hidden поля.
С точки зрения JavaScript поля
hidden являются такими же полями ввода, как и поля типа text, с теми же свойствами и методами. Однако, с точки зрения пользователя - они не существуют, поскольку не появляются на экране. Применяются эти поля главным образом при передачах данных в клиент-сервер операциях либо для хранения промежуточных (временных) данных.Radio кнопки
.Radio
кнопки используются для выбора единственного пункта из группы предложенных действий. И поэтому применение одного поля типа radio кнопки не имеет никакого смысла. Задаются radio кнопки как отдельные объекты, но с одним групповым именем. При этом JavaScript создает массив кнопок, к которому можно обращаться по индексу. Первая определенная кнопка имеет индекс 0, вторая - 1 и т.д. Заметим, что атрибут VALUE этих полей для JavaScript не имеет существенного значения. Используется он, главным образом, при операциях submit для серверных CGI программ.Примеры:
<INPUT TYPE="radio" NAME="rad" VALUE="radio_button1" onClick=0>Выше был приведен пример задания выключенных обработчиков событий.
В следующем примере выполняется проверка выбранной radio кнопки:<HTML>Функция testButton() выполняет процедуру обработки события, возникшего при нажатии кнопки типа "button" для анализа отметки включения radio кнопки. Внутри цикла по всем кнопкам группы "rad" проверяется факт включения каждой кнопки. При обнаружении включенной кнопки цикл прекращается и выдается сообщение о номере кнопки (начиная с 0) функцией alert().
Если в скрипт-программе используется несколько групп типа
radio, к кнопкам каждойУстановка значений.
Установить включение кнопки достаточно просто, необходимо задать параметор CHECKED при инициализации объекта средствами HTML. Например:
<INPUT TYPE="radio" NAME="rad" Value="rad_button1" CHECKED onClick=0><BR>
Установка значения кнопки программным путем в JavaScript выполняется заданием значения свойству
checked значения true. В примере устанавливается значение кнопки, используя форму обращения к кнопке как элементу массива:form.rad[0].checked = true; // sets to first button in the rad group
Check поля.
Check
поля, в отличие от radio кнопок могут употребляться в одиночном режиме. В JavaScript программе можно проверить отмечено ли поле, установить либо удалить отметку.Пример:
<HTML><INPUT TYPE="checkbox" NAME="check1" Value="0" CHECKED>Checkbox 1<BR>
Программным способом установить отметку поля check можно задавая значение true свойству checked объекта. При этом указывается имя этого поля:form.check1.checked = true
Напомним, что можно выполнять программным путем проверку отметки полей
check при множественном их задании.Text Area поля.
Поля типа text area применяются для ввода некоторого числа текстовых строк. Параметрами являются: ROWS - для задания числа строк,По умолчанию задается поле в 1 строку длиной в 20 символов.
Пример:
<TEXTAREA NAME="myarea" COLS="40" ROWS="7">В JavaScript программе можно прочитать содержимое поля ввода text area. Это делается используя значение свойства value объекта.
Пример:<HTML>
Можно задать предварительный текст в поле
text area двумя способами:Первый способ:
<TEXTAREA NAME="myarea" COLS="40" ROWS="7">Второй способ:
formname.textarea.value = "Text goes here",
Selection
.Блок меню типа Selection позволяет выбирать пункт меню из множественного списка. Поле списка создается тегами <SELECT> заголовка списка и <OPTION> для отдельного элемента списка.
Пример списка с одним окном:
<SELECT NAME="list">Пример списка с окном для 4 пунктов:
<SELECT NAME="list" SIZE="4">Для определения номера выбранного пункта используется свойство
selectedIndex данного объекта. Выбранный пункт принимает значения индекса массива: 0 - соответствует первому пункту списка меню, 1 - второму и т.д. Если не выбран ни один пункт списка, возвращаемым значением будет -1.Пример:
<HTML> Если есть необходимость получения текста меню
выбранного пункта, надо использовать
функцию testSelect():
10.5.
Некоторые дополнительные возможности <SELECT> объектов. Применение объектов типа <SELECT> доставляет
немало трудностей для многих JavaScript программистов. Ниже приведены примеры в
качестве рекомендации при работе со списком меню, созданным <SELECT>
объектом,
где:
formname - уникальное имя объекта
a
. определить значимость выбранного пункта меню.(Если указанный пункт меню отсутствует, возвращаемым результатом будет null.)result = formname.selectname.options[index];
b. отметить выбранный пункт:
formname.selectname.selectedIndex = index;
c.
чтение текста выбранного пункта меню: Item =
formname.selectname.selectedIndex;
Result = formname.selectname.options[Item].text;
d
. определить число пунктов в списке меню:Result = formname.selectname.length;
e
. задать текст для выбранного пункта меню и перезагрузить страницу:
formname.selectname.options[index].text =
"Text";
history.go(0);
"Text" - новый текст пункта меню.
10.6.
Некоторые события в Form.В вышеприведенных примерах использовался
onClick обработчик событий, как наиболее популярный для form структур. Тем не менее, при обработке элементов form используются и другие типы обработчиков событий: - onFocus - при фокусировке поля ввода, - onBlur - при снятии фокусировки с поля ввода,Замечание: В Netscape 2.0 обработка события типа onChange и onSelect выполняется некорректно.
10.7.
Проверка значимости Form полей в JavaScript.Как уже выше отмечалось, использование структур
form средствами HTML предназначалось для ввода данных и передачи их для обработки на серверные компьютеры CGI программами. Использование JavaScript программ для этой же цели может заключаться, в частности, в проверке вводимой информации в интерактивном режиме на клиент-компьютере до отправки ее на сервера. При этом, с серверных CGI программ может быть снята проблема проверки корректности обраба-тываемой информации.10.7.1.
Программы проверки ввода.Проверка правильности ввода - многоплановая проблема: чтение введенной информации, анализ правильности заполнения нужных полей, допустимости символов, синтаксический и содержательный анализ введенных данных, выдача диагностических сообщений, коррекция ввода и многое другое. Все эти операции можно выполнять JavaScript программами. Ниже приводится типичный пример проверки правильности ввода цифровой информации:
<HTML>Заметим, что используемая в примере функция
isNumberString(), кроме проверки символов, выполняет проверку на наличие введенных данных. Если не делать такой проверки, "пустой" ввод может рассматриваться как допустимое значение.Обзор программ проверки значимости
.Интерпретатор языка JavaScript содержит ряд встроенных полезных функций для обработки и проверки различного рода данных. Ниже приводится список таких программ.
Программы
Что они делаютIsAlphabeticChar
Проверяет, является ли символ чисто алфавитным
10.7.2.
Практические примеры проверки ввода.Ниже будет приведен пример с демонстрацией прменения JavaScript операторов для проверки корректности введенных данных в полях ввода
form.Установлены 4 поля ввода с соответствющими кнопками для запуска программы обработки ввода. Надо ввести предписуемый текст и нажать кнопку ввода. Если программа обнаружит несоответствие введенных данных требуемому формату, будет выдано сообщение для повторения ввода.
Требование к вводу:
- в первом поле надо ввести
e-mail адрес в установленном синтаксисе, Упражнения с приведенным примером показывают, как
работают программы проверки значимости. В примере выполняется двойная проверка
каждого ввода, второй раз - при операции Submit. В реальной ситуации этого не
требуется, достаточно одной проверки при операциях пересылки.
Проверка полей Textarea.
Подобно полю ввода типа text, нужно использовать свойство value для чтения и проверки содержимого поля text area.Пример:
Ret = document.myform.control.value; // assigns content to Ret
Ret =
document.myform.control.value.length; // assigns length of content to Ret
Ret
= document.myform.control.value.indexOf ("\n") // value 0 or above indicates
hard return
Проверка Check box полей.
Поле типа
check box имеет два состояния: on или off (включено/выключено). В чтении такого состояния и заключается проверка данного поля.Ret = document.myform.control.checked; // true if checked; false if not
checked
Проверка Radio кнопок
.За один раз можно проверить включение одной
radio кнопки из всей группы. Для этого формируется цикл по числу кнопок в группе и поочередно проверяется выбор одной из кнопок.for (Count = 0; Count < 3; Count++) {Используя такой же цикл можно также проверить ситуацию, когда ни одна из кнопок не включена.Это бывает полезным, если вся группа кнопок была в выключенном состоянии при их инициализации.
Selected = false;Проверка Selection меню
.В следующем примере в цикле проверяется произведен ли хоть один выбор пункта меню:
Selected = false;При множественном задании выбора меню можно проверить количество выбранных пунктов.
В приведенном ниже примере предполагается, что должен быть произведен выбор по крайней мере трех пунктов меню.Selected = 0;Можно использовать противоположную логику для проверки, что произведен выбор не более, чем требовалось:
Selected = 0;