# 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. ```js no-beautify 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`. For instance: ```html run height=40
``` There may be multiple elements with the same name, that's often the case with radio buttons. In that case `form.elements[name]` is a collection, for instance: ```html run height=40
``` 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`. ````smart header="Fieldsets as \"subforms\"" A form may have one or many `
` elements inside it. They also have `elements` property that lists form controls inside them. For instance: ```html run height=80
info
``` ```` ````warn header="Shorter notation: `form.name`" 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: ```html run height=40
``` That's usually not a problem, 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. Here's the picture: ![](form-navigation.svg) For instance: ```html run height=40
``` ## 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. Like this: ```js input.value = "New value"; textarea.value = "New text"; input.checked = true; // for a checkbox or radio button ``` ```warn header="Use `textarea.value`, not `textarea.innerHTML`" 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 ``, that do the same: 1. Find the corresponding ` ``` The full specification of the ``. `option.text` : Text content of the option (seen by the visitor). ## References - Specification: . ## Summary Form navigation: `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, or `input.checked` for checkboxes and radio buttons. For `