Проверка выбора группы переключателей перед передачей результатов формы
Web-браузер позволяет посетителю сайта выбирать только один переключатель из группы переключателей с одним и тем же значением атрибута name. Поэтому, для проверки выбора переключателя в группе переключателей нет необходимости пользоваться JavaScript-сценарием. Тем не менее, Web-браузер не заставляет посетителя выбирать хотя бы один переключатель в каждой группе переключателей. Следовательно, необходимо написать функцию проверки, которая бы проверяла количество выбранных переключателей в каждой группе, которые посетитель не должен оставлять пустыми.
Предположим, например, что на форме находятся две группы переключателей, как показано на рис. 3.9.
ПРАКТИКУМ
Если атрибуты всех переключателей в первой группе содержат значение "Contact_OK", а атрибуты всех переключателей во второй группе — значение "User_count", то для проверки того, что посетитель выбрал по одному переключателю из каждой группы можно воспользоваться следующим JavaScript-сценарием:
Рис. 3.9. Две группы переключателей на форме
<html><body><head><script type="text/javascript" language="JavaScript"><!--function ValidateForm(Form){function countSelections(buttonGroup){for (i=0; i<buttonGroup.length; i++){if (buttonGroup[i].checked) return (true);}return (false);{if (!countSelections(Form.Contact_Ok)){
alert("Please select either \"Yes\" or \"No\" from the \"Contact\"options.");
return(false);}if (!countSelections(Form.User_Count)){alert("Please select one of the\"User_Count\" options.") ;return (false) ;
}//** Другие операторы проверки данных формы **return(true);}// --></script>
Обратите внимание, что для каждой группы переключателей установлено свойство length, которое используется для выполнения итераций по массиву переключателей в группе и проверки значения свойства checked для каждого переключателя в группе. Передавая функции CountSelections() сначала группу Contact_OK, а затем группу User__count, можно использовать один и тот же код для проверки наличия выбранного переключателя в каждой из групп, даже несмотря на разное количество переключателей в группах. В каждой группе значение свойства checked для выбранного переключателя равно True. Поэтому функция CountSelections() возвращает True, если в каждой из переданных ей групп переключателей есть хотя бы один переключатель, значение свойства checked которого равно True. Для группы, в которой посетитель не выбрал какой-нибудь переключатель (или другими словами, группы, которую посетитель пропустил),функция CountSelections()возвращает False. Функция ValidateForm() (которая вызывает функцию CountSelections(), в свою очередь, возвращает атрибуту onSubmit дескриптора <input> значение, возвращаемое функцией CountSelections().
Как уже говорилось в предыдущем совете, для того чтобы Web-браузер имел возможность запускать функцию проверки при нажатии посетителем кнопки Submit, в дескриптор <form> формы необходимо добавить атрибут onSubmit, который должен выглядеть следующим образом:
<form name="ExampleForm"onSubmit="return ValidateForm(ExampleForm)"action="http://NVBizNet2.com/_scripts/_pl/FrmScrpt.CGI"method="POST"enctype="application/x-www-form-urlencoded">
He пропустите ключевое слово "return", которое находится перед вызовом функции ValidateForm(). В противном случае Web-браузер передаст результаты формы Web-серверу, даже если функция ValidateForm() вернет значение False, указывающее на наличие ошибок во введенной на форму информации. Если все атрибуты дескриптора введены без ошибок (как в приведенном примере), атрибут onSubmit заставит Web-браузер после нажатия посетителем кнопки Submit выполнить JavaScript-сценарий с целью проверки результатов заполнения формы. Если функция ValidateForm() возвращает значение True, Web-браузер передаст результаты формы по URL-адресу, указанному в атрибуте method дескриптора<form>. В противном случае, Web-браузер вернется к форме ввода данных.