Элементы форм
Наиболее частым применением JavaScript является проверка форм перед отправкой на сервер. Обычно, на вводимую пользователями информацию налагаются определённые требования. JavaScript позволяет на лету обработать введённые данные и сразу указать пользователю на ошибки. Такое поведение страницы очень удобно для взаимодействия.
Навигация по элементам формы
В DOM используются специальные свойства для доступа к любому элементу формы. Прежде всего, необходимо получить ссылку на саму форму. Для этого можно воспользоваться поисковыми методами или свойством document.forms
.
forms
Свойство forms
представляет список всех форм в документе. Доступ к форме осуществляется по её имени или по индексу.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="search"></form> </body> </html> <script> var form = document.forms.search; // или var form = document.forms['search']; // или var form = document.forms[0]; </script>
elements
Доступ к элементу формы осуществляется аналогично свойству document.forms
. Каждая форма имеет свойство elements
, в котором содержится список всех элементов формы.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="search"> <input name="query"> </form> </body> </html> <script> var form = document.forms.search; var input = form.elements.query; // или var input = form.elements['query']; // или var input = form.elements[0]; </script>
Если в форме используется несколько элементов с одинаковым именем, то обращение к элементу по имени вернёт список всех элементов с этим именем.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="search"> <input type="radio" name="query" value="1"> <input type="radio" name="query" value="2"> </form> </body> </html> <script> var form = document.forms.search; var input = form.elements.query; alert(input[0].value); /* 1 */ alert(input[1].value); /* 2 */ </script>
Все элементы форм имеют встроенное свойство form
, которое ссылается на саму форму. Но оно используется редко.
Особенности элемента <input>
value
Свойство value
содержит текущее введённое пользователем значение. До начала ввода пользователем нового значения данное свойство определяется атрибутом value
, если он указан.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="user_form" onsubmit="showValue(); return false" autocomplete="off"> <input type="text" placeholder="some text" name="user_input"> <input type="submit" value="Показать VALUE"> </form> </body> </html> <script> var form = document.forms.user_form; var input = form.elements.user_input; function showValue() { alert(input.value); /* всегда выводит текущее значение */ } </script>
Если ничего не вводить в текстовое поле, то при отправке формы выведется пустая строка, так как атрибут value
не задан.
checked
У элементов с типом checkbox
и radio
свойство value
не может изменяться пользователем. При их использовании необходимо знать, выбраны ли они пользователем. Для этого используется логическое свойство checked
. Оно отражает текущее состояние элемента (отмечен
или не отмечен
) и позволяет его изменить.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="search" autocomplete="off"> <input type="radio" name="query" value="1"> <input type="radio" name="query" value="2" checked> </form> </body> </html> <script> var form = document.forms.search; var input = form.elements.query; alert(input[0].checked); /* false */ alert(input[1].checked); /* true */ </script>
files
Поле для отправки файла (тип file
) имеет свойство files
. Это объект, содержащий список всех вставленных файлов.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="upload" onsubmit="showFile(); return false"> <input type="file" name="user_file"> <input type="submit" value="Отправить"> </form> </body> </html> <script> function showFile() { var form = document.forms.upload; var files = form.elements.user_file.files; alert(files[0].name); /* покажет имя файла */ alert(files[0].lastModifiedDate); /* покажет время последнего изменения файла */ } </script>
focus()
, blur()
С помощью методов focus()
и blur()
поле ввода можно сделать активным или неактивным. Например, можно автоматически сделать активным то поле, в котором допущена ошибка, и т.п.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="search"> <label>Введите что-нибудь: <input name="text_in" oninput="show()"></label> <br> <label>Вы ввели: <input name="text_out"></label> </form> </body> </html> <script> var form = document.forms.search; var text_in = form.elements.text_in; var text_out = form.elements.text_out; text_in.focus(); /* автофокус на поле */ function show() { text_in.blur(); /* снимает фокус с поля */ text_out.value = text_in.value; text_in.value = ''; } </script>
select()
Метод select()
используется для выделения введённого пользователем текста. При этом поле становится активным.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="search"> <label>Введите что-нибудь: <input name="text_in" oninput="show()"></label> <br> <label>Вы ввели: <input name="text_out"></label> </form> </body> </html> <script> var form = document.forms.search; var text_in = form.elements.text_in; var text_out = form.elements.text_out; text_in.focus(); function show() { text_out.value = text_in.value; text_out.select(); /* выделяет содержимое */ } </script>
Особенности элемента <textarea>
Элемент <textarea>
аналогичен полю <input>
. Для него так же доступны методы focus()
, blur()
, select()
. Их значения и действия полностью совпадают с теми же методами элемента <input>
.
value
Элемент <textarea>
не имеет атрибута value
, но свойство value
всё равно имеет. Его значением является содержимое тега.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="test" autocomplete="off"> <textarea name="user_textarea">Текст</textarea> </form> </body> </html> <script> var form = document.forms.test; var textarea = form.elements.user_textarea; alert(textarea.value); /* Текст */ </script>
Особенности элемента <select>
value
Элемент <select>
не имеет атрибута value
. Однако, свойство value
всё равно присутствует. Его значение берётся из той опции (из её свойства value
), которая выбрана в данный момент. Если выбрано несколько опций, то значение берётся из первой.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="test" autocomplete="off"> <select name="user_select" multiple> <option value="1" selected>Число 1</option> <option value="2" selected>Число 2</option> </select> </form> </body> </html> <script> var form = document.forms.test; var select = form.elements.user_select; alert(select.value); /* 1 */ </script>
selectedIndex
Свойство selectedIndex
содержит индекс той опции, которая выбрана в данный момент (если используется атрибут multiple
, то свойство содержит индекс первой из выбранных опций). Изменяя данное свойство, можно изменить текущее значение в поле <select>
. Нумерация начинается с нуля. Значение -1
устанавливается для очистки поля.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="test" autocomplete="off"> <select name="user_select"> <option value="1">Число 1</option> <option value="2" selected>Число 2</option> <option value="3">Число 3</option> </select> </form> </body> </html> <script> var form = document.forms.test; var select = form.elements.user_select; alert(select.selectedIndex); /* 1 */ select.selectedIndex = -1; alert(select.value); /* пустая строка */ </script>
options
Свойство options
содержит список всех тегов <option>
внутри данного элемента <select>
.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="user_form" onsubmit="showNum(); return false" autocomplete="off"> <select name="user_select"> <option value="1">Число 1</option> <option value="2">Число 2</option> <option value="3">Число 3</option> <option value="4">Число 4</option> <option value="5">Число 5</option> <option value="6">Число 6</option> </select> <input type="submit" value="Отправить"> </form> </body> </html> <script> var form = document.forms.user_form; var select = form.elements.user_select; function showNum() { alert('Доступно опций: ' + select.options.length); } </script>
selectedOptions
Свойство selectedOptions
содержит список тех тегов <option>
, которые в данный момент выбраны.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="user_form" onsubmit="showNum(); return false" autocomplete="off"> <select name="user_select" multiple> <option value="1">Число 1</option> <option value="2">Число 2</option> <option value="3">Число 3</option> <option value="4">Число 4</option> <option value="5">Число 5</option> <option value="6">Число 6</option> </select> <input type="submit" value="Отправить"> </form> </body> </html> <script> var form = document.forms.user_form; var select = form.elements.user_select; function showNum() { alert('Выбрано опций: ' + select.selectedOptions.length); } </script>
selected
Элементы <option>
имеют булевое свойство selected
. Оно характеризует состояние опции: выбрана
или не выбрана
.
<html> <head> <title>DOM интерфейс</title> </head> <body> <form name="test" autocomplete="off"> <select name="user_select"> <option value="1">Число 1</option> <option value="2" selected>Число 2</option> </select> </form> </body> </html> <script> var form = document.forms.test; var select = form.elements.user_select; alert(select.options[0].selected); /* false */ alert(select.options[1].selected); /* true */ </script>