Опубликован: 19.10.2006 | Уровень: для всех | Доступ: платный
Лекция 3:

Формы и циклы

< Лекция 2 || Лекция 3: 123 || Лекция 4 >
Аннотация: Основы работы с полями форм и с функциями циклов.

В "предыдущей лекции" были рассмотрены операторы if / else, основы проверки и функций. Если в ходе дальнейшего чтения возникнут какие-то вопросы, то имеет смысл еще раз прочитать " предыдущую лекцию" .

Мы знаем теперь, как проверять данные, но при создании кода JavaScript обычно требуется проверять не оставшееся количество воображаемых яблок. Одной из наиболее общих областей применения JavaScript являются поля формы. Предположим, например, что имеется простая контактная форма. Иногда требуется убедиться, что пользователь ввел в форму свое имя или что он выбрал как минимум одну радио-кнопку для вопроса. Вот пример такой формы:

Имя:      Ваш любимый цвет:  Синий    Желтый
                             Красный  Черный
                             Зеленый  Другой
Фамилия:
Адрес Email:  

Отправить форму   Очистить форму         Зафиксировать форму на месте

Ниже представлен код этой формы. Он приведен только для иллюстрации.

<form name="tutform" onsubmit="return noform();" class="codesnip" 
  style="background-color:#FFF;z-index:10;">
<table width="100%">
  <tr>
    <td>Имя:</td>
    <td><input name="firstname"></td>
    <td>Ваш любимый цвет:</td>
    <td rowspan="3" valign="top">
      <input type="radio" name="color" value="blue">Синий<br />
      <input type="radio" name="color" value="red">Красный<br />
      <input type="radio" name="color" value="green">Зеленый
    </td>
    <td rowspan="3" valign="top">
      <input type="radio" name="color" value="yellow">Желтый<br />
      <input type="radio" name="color" value="black">Черный<br />
      <input type="radio" name="color" value="other">Другой
    </td>
  </tr>
  <tr>
    <td>Фамилия:</td>
    <td><input name="lastname"></td>
  </tr>
  <tr>
    <td>Адрес Email:</td>
    <td><input name="email"></td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" value="Отправить форму">
    <input type="reset" value="Очистить форму"></td>
    <td colspan="3" align="right"><button id="lockbutton" 
onclick="swapLock();return false;">Зафиксировать форму на месте</button></td>
  </tr>
</table>
</form>

Прежде всего необходимо узнать, как создать объект JavaScript, который ссылается на форму. Любую форму на странице можно указать с помощью конструкции document.forms. Если имеется форма с именем tutform, то к ней можно обратиться следующим образом: document.forms.tutform.

На любые элементы внутри формы (поля ввода, поля выбора, флажки и т.д) можно ссылаться с помощью конструкции elements: document.forms.ИмяФормы.elements. Если на форме имеется поле ввода с именем firstname, то значение этого поля можно вывести следующим образом:

alert('Имя: ' + document.forms.tutform.elements.firstname.value);

Если щелкнуть на этой кнопке, а затем отправить учебную форму, то появится уведомление с тем значением, которое было введено в поле Имя. Как это происходит? Когда форма посылается на сервер, Web-браузер ищет код onsubmit. Если этот код существует, то форма выполняет его перед отправкой:

<SCRIPT TYPE="text/javascript">
function validateForm(){
// код проверки формы находится здесь 
}
</SCRIPT>

<FORM ONSUBMIT="return validateForm();">
<!-- элементы формы находятся здесь -->
</FORM>

Теперь, зная, как получить доступ к форме и элементам на этой форме, выполним некоторые основные проверки. Распространенной задачей является проверка, что именно пользователь ввел в поле ввода. Например, надо проверить, что пользователь ввел свое имя.

Как видно из предыдущего фрагмента кода, свойство " .value " объекта формы можно использовать для получения его значения. Это работает для объектов формы любого типа. Попробуем теперь проверить, что пользователь ввел на форме свои имя и фамилию:

function validateForm(){
  var form_object = document.forms.tutform;
    if(form_object.elements.firstname.value == ''){
    alert('Вы должны ввести свое имя!');
    return false;
  } else if(form_object.elements.lastname.value == ''){
    alert('Вы должны ввести свою фамилию!');
    return false;
  }
  return true;
}

Важными моментами, которые необходимо отметить в этой функции, являются строки return false ; и return true ;. Если функция проверки возвращает значение true, то форма будет отправлена как обычно. Если, однако, функция вернет значение false, то форма отправлена не будет. Необходимо сообщить пользователю, почему форма не была отправлена, поэтому в функцию вставлены уведомления ( alert ).

Другим важным полем для проверки в демонстрационной форме будет набор радио-кнопок " Любимый цвет ". Если щелкнуть несколько раз на этих кнопках, то можно видеть, что в данный момент времени может быть выбрана только одна из них. Но желательно знать, что пользователь выбрал хотя бы одну из этих кнопок.

Радио-кнопки и флажки на форме представляют специальную ситуацию. Часто имеется несколько радио-кнопок с одним и тем же именем, что почти всегда исключено для полей ввода, полей выбора и т.д.:

<input type="radio" name="color" value="blue">Синий
<input type="radio" name="color" value="red">Красный 
<input type="radio" name="color" value="green">Зеленый

В связи с этим существует способ доступа ко всем радио-кнопкам с одним именем. Значение document.forms.имяФормы.elements.имяРадиокнопок будет содержать список со всеми радио-кнопками. Так как необходимо проверить, что хотя бы одна радио-кнопка отмечена, то потребуется просмотреть все эти радио-кнопки. Если хотя бы одна из них отмечена, функция проверки должна вернуть true. Поэтому функция выглядит теперь следующим образом:

function validateForm(){
  var radios = document.forms.tutform.elements.color;
  for(var i=0; i<radios.length; i++){
    if(radios[i].checked) return true;
  }
  alert('Вы должны выбрать цвет!');
  return false;
}

Новым элементом в этом коде является так называемый цикл for. Он выглядит немного более сложно, чем есть в действительности, поэтому разберем его составные элементы:

for(var i=0; i<radios.length; i++)
< Лекция 2 || Лекция 3: 123 || Лекция 4 >
Елена Сапегова
Елена Сапегова

После прохождения теоретической части пришло письмо об окончании теоретической части курса, будет ли практическая часть?

Рустам Рахимов
Рустам Рахимов

Пол часа искал в интеренете, как что работает. Такое чувство что автор пишет для людей которые уже знают js, или просто хвастается своими знаниями. Конструкция формы непонятна. И можно было бы в кратце написать, что такое событие которое используют. Сорершенно не понятно как работает форма, и как брать из нее значение. 

function Complete() {

    var x = "Имя: " + document.tutform.firstname.value;

alert(x);

} - Так брать значение из формы tutform, firstname-получаем значение из имени. 

<INPUT TYPE="button" VALUE="Готово" onClick="Complete();"> - Нужно к кнопке прописать событие, при нажатие на кнопку готово, чтобы возвращалось значение с помощью функции. А так ничего не работает, и смысла учить нету, если не знать почему не работает.