Блокирование и разблокирование элементов формы "на лету"
Иногда элементы формы могут носить взаимоисключающий характер. Например, если вы зададите посетителю вопрос: "Состоите ли вы в браке?" и в качестве ответа на этот вопрос посетитель выберет переключатель нет, ему уже не нужно будет вводить имя супруга в поле spouse. Аналогично, если на форме находится группа флажков, в которой посетитель может выбрать любые устраивающие его опции, и им был выбран флажок наподобие "Ничего" или "Ничего перечисленного", он уже не должен выбирать другие флажки в группе. Каждый элемент формы имеет атрибут disabled, который можно использовать для запрещения пользователю изменять элемент.
ПРИМЕЧАНИЕ: Некоторые устаревшие браузеры не поддерживают атрибут disabled. Таким образом, проверку правильности ввода в форму данных должна осуществлять функция проверки, даже если имеется сценарий, который устанавливает атрибут disabled для соответствующих полей формы.
ПРАКТИКУМ
Предположим, например, что форма, показанная на рис. 3.22, используется для запроса у посетителя его семейного положения. За счет выполнения следующей JavaScript-функции можно блокировать ввод в поле имени второй половины и запретить посетителю изменять его содержимое или даже устанавливать на него курсор, т.е. перемещать фокус (при этом само поле затеняется серым цветом).
function disableSpouseName(Form, status)
{
if (status) Form.SpouseName.value="Введите имя супруга(и)";
Form.SpouseName.disabled=status; return;
}

Рис. 3.22. Форма с переключателями, которые управляют состоянием атрибута disabled поля ввода текста
Для указания Web-браузеру на необходимость запуска приведенной выше фун- кции при выборе переключателя Maritaistatus введите следующий код:
<р>Состоите ли вы в браке?
<input type="radio" name= "MaritalStatus" value="Married" onclick="disableSpouseName(ExampleForm, false)"/>Состою<input type="radio" name="MaritalStatus" value="Single" onclick="disableSpouseName(ExampleForm, true)"/>He состою></р>
Атрибут onclick дескриптора <input> для переключателя заставляет Web-браузер выполнить функцию disableSpuseName() при выборе радио-переключателя. Передавая функции disableSpuseName() значение False или True, Web-браузер блокирует или разблокирует поле SpouseName (на рис. 3.22 оно обозначено как "Имя супруга (и):"). Так, например, если посетитель выберет переключатель "Состою в браке", функции disableSpuseName() будет передано значение False. Функция, со своей стороны, установит значение атрибута disabled элемента SpouseName формы равным False, что сделает элемент активным (разблокирует его) и посетитель сможет ввести в поле имя своей половины. В противном случае, если посетитель выберет переключатель "Не состою", Web-браузер передаст функции disableSpuseName () Значение True и функция установит значение атрибута disabled элемента SpouseName формы равным True, что заблокирует поле и не позволит посетителю изменить его содержимое.
Вы можете заблокировать любой элемент формы, включая кнопки. Например, при необходимости начальной блокировки кнопки Submit нужно ввести в код страницы следующую строку:
<input disabled type="Submit" name="Submit" value="Отправить">
Затем, для разблокирования кнопки Submit при заполнении посетителем полей формы вызовите JavaScript-функцию, включающую следующую строку:
FormName.Submit.disabled=false;
Кроме того, вы имеете возможность заблокировать любой элемент формы с помощью следующей строки JavaScript-кода:
FormName.ElementName.disabled=true;
Для разблокирования элемента формы в приведенной выше строке установите Значение атрибута disabled равным False.
ПРИМЕЧАНИЕ: Если для изменения состояния атрибута disabled элемента формы используется JavaScript-код, стандартная функция Web-браузера, сбрасывающая состояние элементов формы, не будет возвращать элемент в его исходное состояние. Поэтому, если вы заблокировали элемент, который в исходном состоянии был активен, необходимо воспользоваться атрибутом onReset дескриптора <form> формы и вызвать функцию, которая при нажатии посетителем кнопки Reset будет возвращать значение атрибута disabled элемента формы в его исходное состояние.