Form properties and methods
Forms and control elements, such as have a lot of special properties and events.
Working with forms will be much more convenient when we learn them.
Navigation: form and elements
Document forms are members of the special collection document.forms .
That’s a so-called “named collection”: it’s both named and ordered. We can use both the name or the number in the document to get the form.
document.forms.my; // the form with name="my" document.forms[0]; // the first form in the document
When we have a form, then any element is available in the named collection form.elements .
There may be multiple elements with the same name. This is typical with radio buttons and checkboxes.
In that case, form.elements[name] is a collection. For instance:
These navigation properties do not depend on the tag structure. All control elements, no matter how deep they are in the form, are available in form.elements .
A form may have one or many elements inside it. They also have elements property that lists form controls inside them.
There’s a shorter notation: we can access the element as form[index/name] .
In other words, instead of form.elements.login we can write form.login .
That also works, but there’s a minor issue: if we access an element, and then change its name , then it is still available under the old name (as well as under the new one).
That’s easy to see in an example:
That’s usually not a problem, however, because we rarely change names of form elements.
Backreference: element.form
For any element, the form is available as element.form . So a form references all elements, and elements reference the form.
Form elements
Let’s talk about form controls.
input and textarea
We can access their value as input.value (string) or input.checked (boolean) for checkboxes and radio buttons.
input.value = "New value"; textarea.value = "New text"; input.checked = true; // for a checkbox or radio button
Please note that even though holds its value as nested HTML, we should never use textarea.innerHTML to access it.
It stores only the HTML that was initially on the page, not the current value.
select and option
A element has 3 important properties:
- select.options – the collection of subelements,
- select.value – the value of the currently selected ,
- select.selectedIndex – the number of the currently selected .
They provide three different ways of setting a value for a :
- Find the corresponding element (e.g. among select.options ) and set its option.selected to true .
- If we know a new value: set select.value to the new value.
- If we know the new option number: set select.selectedIndex to that number.
Here is an example of all three methods:
Unlike most other controls, allows to select multiple options at once if it has multiple attribute. This attribute is rarely used, though.
For multiple selected values, use the first way of setting values: add/remove the selected property from subelements.
Here’s an example of how to get selected values from a multi-select:
new Option
In the specification there’s a nice short syntax to create an element:
option = new Option(text, value, defaultSelected, selected);
This syntax is optional. We can use document.createElement(‘option’) and set attributes manually. Still, it may be shorter, so here are the parameters:
- text – the text inside the option,
- value – the option value,
- defaultSelected – if true , then selected HTML-attribute is created,
- selected – if true , then the option is selected.
The difference between defaultSelected and selected is that defaultSelected sets the HTML-attribute (that we can get using option.getAttribute(‘selected’) , while selected sets whether the option is selected or not.
In practice, one should usually set both values to true or false . (Or, simply omit them; both default to false .)
For instance, here’s a new “unselected” option:
let option = new Option("Text", "value"); // creates
The same option, but selected:
let option = new Option("Text", "value", true, true);
Option elements have properties:
option.selected Is the option selected. option.index The number of the option among the others in its . option.text Text content of the option (seen by the visitor).
References
Summary
document.forms A form is available as document.forms[name/index] . form.elements Form elements are available as form.elements[name/index] , or can use just form[name/index] . The elements property also works for . element.form Elements reference their form in the form property.
Value is available as input.value , textarea.value , select.value , etc. (For checkboxes and radio buttons, use input.checked to determine whether a value is selected.)
For , one can also get the value by the index select.selectedIndex or through the options collection select.options .
These are the basics to start working with forms. We’ll meet many examples further in the tutorial.
In the next chapter we’ll cover focus and blur events that may occur on any element, but are mostly handled on forms.
Работа с формами
Один из способов взаимодействия с пользователями представляют html-формы. Например, если нам надо получить от пользователя некоторую информацию, мы можем определить на веб-странице формы, которая будет содержать текстовые поля для ввода информации и кнопку для отправки. И после ввода данных мы можем обработать введенную информацию.
Для создания формы используется элемент :
В JavaScript форма представлена объектом HtmlFormElement . И после создания формы мы можем к ней обратиться различными способами.
Первый способ заключается в прямом обращении по имени формы:
var searchForm = document.search;
Второй способ состоит в обращении к коллекции форм документа и поиске в ней нужной формы:
С помощью свойства name объекта формы мы можем получить значение атрибута name у соответствующего элемента формы в коде html.
Еще один способ сочетает оба подхода:
var searchForm = document.forms["search"];
И также можно применять стандартные способы для поиска элемента формы, например, по id, по тегу или по селектору. Например:
var searchForm = document.getElementsByTagname("form")[0]
Форма имеет ряд свойств, из которых наиболее важными являются вышерассмотренное свойство name , а также свойство elements , которое содержит коллекцию элементов формы:
Среди методов формы надо отметить метод submit() , который отправляет данные формы на сервер, и метод reset() , который очищает поля формы:
var searchForm = document.forms["search"]; searchForm.submit(); searchForm.reset();
Элементы форм
Форма может содержать различные элементы ввода html: input, textarea, button, select и т.д. Но все они имеют ряд общих свойств и методов.
Также, как и форма, элементы форм имеют свойство name , с помощью которого можно получить значение атрибута name :
Другим важным свойством является свойство value , которое позволяет получить или изменить значение поля:
var searchForm = document.forms["search"]; var keyBox = searchForm.elements["key"]; document.write(keyBox.value); // hello world // установка значения keyBox.value = "Привет мир";
С помощью свойства form можно получить родительский объект формы:
var searchForm = document.forms["search"]; var keyBox = searchForm.elements["key"]; document.write(keyBox.form.name); // search
Данное свойство может быть полезно, например, при отправке формы, когда перед непосредственной отправкой формы необходимо провести валидацию всех полей формы.
Свойство type позволяет получить тип поля ввода. Это либо название тега элемента (например, textarea), либо значение атрибута type у элементов input .
Из методов можно выделить методы focus() (устанавливает фокус на элемент) и blur() (убирает фокус с элемента):
var searchForm = document.forms["search"]; var keyBox = searchForm.elements["key"]; keyBox.focus();