ФоÑÐ¼Ñ Ð¸ ÑлеменÑÑ ÑпÑавлениÑ, Ñакие как <input>, имеÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑпеÑиалÑнÑÑ
ÑвойÑÑв и ÑобÑÑий.
РабоÑаÑÑ Ñ ÑоÑмами ÑÑÐ°Ð½ÐµÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ñдобнее, когда Ð¼Ñ Ð¸Ñ Ð¸Ð·ÑÑим.
ÐавигаÑиÑ: ÑоÑÐ¼Ñ Ð¸ ÑлеменÑÑ
ФоÑÐ¼Ñ Ð² докÑменÑе вÑ
одÑÑ Ð² ÑпеÑиалÑнÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑÐ¸Ñ document.forms.
ÐÑо Ñак назÑÐ²Ð°ÐµÐ¼Ð°Ñ Â«Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ð°Ñ» коллекÑиÑ: Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑоÑÐ¼Ñ ÐºÐ°Ðº ÐµÑ Ð¸Ð¼Ñ, Ñак и поÑÑдковÑй Ð½Ð¾Ð¼ÐµÑ Ð² докÑменÑе.
document.forms.my - ÑоÑма Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ "my" (name="my")
document.forms[0] - пеÑÐ²Ð°Ñ ÑоÑма в докÑменÑе
Ðогда Ð¼Ñ Ñже полÑÑили ÑоÑмÑ, лÑбой ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð´Ð¾ÑÑÑпен в именованной коллекÑии form.elements.
ÐапÑимеÑ:
<form name="my">
<input name="one" value="1">
<input name="two" value="2">
</form>
<script>
// полÑÑаем ÑоÑмÑ
let form = document.forms.my; // <form name="my"> element
// полÑÑаем ÑлеменÑ
let elem = form.elements.one; // <input name="one"> element
alert(elem.value); // 1
</script>
ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑколÑко ÑлеменÑов Ñ Ð¾Ð´Ð½Ð¸Ð¼ и Ñем же именем, ÑÑо ÑаÑÑо бÑÐ²Ð°ÐµÑ Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°Ð¼Ð¸-пеÑеклÑÑаÑелÑми radio.
Ð ÑÑом ÑлÑÑае form.elements[name] ÑвлÑеÑÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑией, напÑимеÑ:
<form>
<input type="radio" name="age" value="10">
<input type="radio" name="age" value="20">
</form>
<script>
let form = document.forms[0];
let ageElems = form.elements.age;
alert(ageElems[0]); // [object HTMLInputElement]
</script>
ÐÑи навигаÑионнÑе ÑвойÑÑва не завиÑÑÑ Ð¾Ñ ÑÑÑÑкÑÑÑÑ Ñегов внÑÑÑи ÑоÑмÑ. ÐÑе ÑлеменÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑоÑмÑ, как Ð±Ñ Ð³Ð»Ñбоко они не наÑ
одилиÑÑ Ð² ÑоÑме, доÑÑÑÐ¿Ð½Ñ Ð² коллекÑии form.elements.
<fieldset> как «подÑоÑма»ФоÑма Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾Ð´Ð¸Ð½ или неÑколÑко ÑлеменÑов <fieldset> внÑÑÑи ÑебÑ. Ðни Ñакже поддеÑживаÑÑ ÑвойÑÑво elements, в коÑоÑом наÑ
одÑÑÑÑ ÑлеменÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð½ÑÑÑи ниÑ
.
ÐапÑимеÑ:
<body>
<form id="form">
<fieldset name="userFields">
<legend>info</legend>
<input name="login" type="text">
</fieldset>
</form>
<script>
alert(form.elements.login); // <input name="login">
let fieldset = form.elements.userFields;
alert(fieldset); // HTMLFieldSetElement
// Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ доÑÑаÑÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿Ð¾ имени как из ÑоÑмÑ, Ñак и из fieldset Ñ Ð½Ð¸Ð¼
alert(fieldset.elements.login == form.elements.login); // true
</script>
</body>
form.nameÐÑÑÑ Ð±Ð¾Ð»ÐµÐµ коÑоÑÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ: Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ полÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑлеменÑÑ ÑеÑез form[index/name].
ÐÑÑгими Ñловами, вмеÑÑо form.elements.login Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ напиÑаÑÑ form.login.
ÐÑо Ñакже ÑабоÑаеÑ, но еÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ°Ñ Ð¿Ñоблема: еÑли Ð¼Ñ Ð¿Ð¾Ð»ÑÑаем ÑлеменÑ, а заÑем менÑем его ÑвойÑÑво name, Ñо он вÑÑ ÐµÑÑ Ð±ÑÐ´ÐµÑ Ð´Ð¾ÑÑÑпен под ÑÑаÑÑм именем (Ñакже, как и под новÑм).
Ð ÑÑом легÑе ÑазобÑаÑÑÑÑ Ð½Ð° пÑимеÑе:
<form id="form">
<input name="login">
</form>
<script>
alert(form.elements.login == form.login); // true, Ð²ÐµÐ´Ñ ÑÑо одинаковÑе <input>
form.login.name = "username"; // изменÑем ÑвойÑÑво name Ñ ÑлеменÑа input
// form.elements обновили Ñвои имена:
alert(form.elements.login); // undefined
alert(form.elements.username); // input
// а в form Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ð¾Ð±Ð° имени: новое и ÑÑаÑое
alert(form.username == form.login); // true
</script>
ÐбÑÑно ÑÑо не вÑзÑÐ²Ð°ÐµÑ Ð¿Ñоблем, Ñак как Ð¼Ñ Ñедко менÑем имена Ñ ÑлеменÑов ÑоÑмÑ.
ÐбÑаÑÐ½Ð°Ñ ÑÑÑлка: element.form
ÐÐ»Ñ Ð»Ñбого ÑлеменÑа ÑоÑма доÑÑÑпна ÑеÑез element.form. Так ÑÑо ÑоÑма ÑÑÑлаеÑÑÑ Ð½Ð° вÑе ÑлеменÑÑ, а ÑÑи ÑлеменÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° ÑоÑмÑ.
ÐÐ¾Ñ Ð¸Ð»Ð»ÑÑÑÑаÑиÑ:
ÐÑимеÑ:
<form id="form">
<input type="text" name="login">
</form>
<script>
// form -> element
let login = form.login;
// element -> form
alert(login.form); // HTMLFormElement
</script>
ÐлеменÑÑ ÑоÑмÑ
РаÑÑмоÑÑим ÑлеменÑÑ ÑпÑавлениÑ, иÑполÑзÑемÑе в ÑоÑÐ¼Ð°Ñ .
input и textarea
РиÑ
знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ Ð´Ð¾ÑÑÑп ÑеÑез ÑвойÑÑво input.value (ÑÑÑока) или input.checked (бÑлево знаÑение) Ð´Ð»Ñ ÑекбокÑов.
ÐÐ¾Ñ Ñак:
input.value = "Ðовое знаÑение";
textarea.value = "ÐовÑй ÑекÑÑ";
input.checked = true; // Ð´Ð»Ñ ÑекбокÑов и пеÑеклÑÑаÑелей
textarea.value вмеÑÑо textarea.innerHTMLÐбÑаÑим внимание: Ñ
оÑÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ <textarea>...</textarea> и Ñ
ÑÐ°Ð½Ð¸Ñ ÑÐ²Ð¾Ñ Ð·Ð½Ð°Ñение как вложеннÑй HTML, нам не ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ textarea.innerHTML Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к немÑ.
Там Ñ ÑаниÑÑÑ ÑолÑко ÑÐ¾Ñ HTML, коÑоÑÑй бÑл изнаÑалÑно на ÑÑÑаниÑе, а не ÑекÑÑее знаÑение.
select и option
ÐÐ»ÐµÐ¼ÐµÐ½Ñ <select> Ð¸Ð¼ÐµÐµÑ 3 важнÑÑ
ÑвойÑÑва:
select.optionsâ коллекÑÐ¸Ñ Ð¸Ð· подÑлеменÑов<option>,select.valueâ знаÑение вÑбÑанного в даннÑй моменÑ<option>,select.selectedIndexâ Ð½Ð¾Ð¼ÐµÑ Ð²ÑбÑанного<option>.
Ðни даÑÑ ÑÑи ÑазнÑÑ
ÑпоÑоба ÑÑÑановиÑÑ Ð·Ð½Ð°Ñение в <select>:
- ÐайÑи ÑооÑвеÑÑÑвÑÑÑий ÑлеменÑ
<option>и ÑÑÑановиÑÑ Ð²option.selectedзнаÑениеtrue. - УÑÑановиÑÑ Ð²
select.valueзнаÑение нÑжного<option>. - УÑÑановиÑÑ Ð²
select.selectedIndexÐ½Ð¾Ð¼ÐµÑ Ð½Ñжного<option>.
ÐеÑвÑй ÑпоÑоб наиболее понÑÑнÑй, но (2) и (3) ÑвлÑÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑдобнÑми пÑи ÑабоÑе.
ÐÐ¾Ñ ÑÑи ÑпоÑÐ¾Ð±Ñ Ð½Ð° пÑимеÑе:
<select id="select">
<option value="apple">Яблоко</option>
<option value="pear">ÐÑÑÑа</option>
<option value="banana">Ðанан</option>
</select>
<script>
// вÑе ÑÑи ÑÑÑоки делаÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же
select.options[2].selected = true;
select.selectedIndex = 2;
select.value = 'banana';
</script>
РоÑлиÑие Ð¾Ñ Ð±Ð¾Ð»ÑÑинÑÑва дÑÑгиÑ
ÑлеменÑов ÑпÑавлениÑ, <select> позволÑÐµÑ Ð½Ð°Ð¼ вÑбÑаÑÑ Ð½ÐµÑколÑко ваÑианÑов одновÑеменно, еÑли Ñ Ð½ÐµÐ³Ð¾ ÑÑÐ¾Ð¸Ñ Ð°ÑÑибÑÑ multiple. ÐÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸ÑполÑзÑÑÑ Ñедко, но в ÑÑом ÑлÑÑае Ð´Ð»Ñ ÑабоÑÑ Ñо знаÑениÑми необÑ
одимо иÑполÑзоваÑÑ Ð¿ÐµÑвÑй ÑпоÑоб, Ñо еÑÑÑ ÑÑавиÑÑ Ð¸Ð»Ð¸ ÑдалÑÑÑ ÑвойÑÑво selected Ñ Ð¿Ð¾Ð´ÑлеменÑов <option>.
ÐÑ
коллекÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ ÐºÐ°Ðº select.options, напÑимеÑ:
<select id="select" multiple>
<option value="blues" selected>ÐлÑз</option>
<option value="rock" selected>Рок</option>
<option value="classic">ÐлаÑÑика</option>
</select>
<script>
// полÑÑаем вÑе вÑбÑаннÑе знаÑÐµÐ½Ð¸Ñ Ð¸Ð· select Ñ multiple
let selected = Array.from(select.options)
.filter(option => option.selected)
.map(option => option.value);
alert(selected); // blues,rock
</script>
Ðолное опиÑание ÑлеменÑа <select> доÑÑÑпно в ÑпеÑиÑикаÑии https://html.spec.whatwg.org/multipage/forms.html#the-select-element.
new Option
ÐÐ»ÐµÐ¼ÐµÐ½Ñ <option> Ñедко иÑполÑзÑеÑÑÑ Ñам по Ñебе, но и здеÑÑ ÐµÑÑÑ ÐºÐ¾Ðµ-ÑÑо инÑеÑеÑное.
Ð ÑпеÑиÑикаÑии еÑÑÑ ÐºÑаÑивÑй коÑоÑкий ÑинÑакÑÐ¸Ñ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑлеменÑа <option>:
option = new Option(text, value, defaultSelected, selected);
ÐаÑамеÑÑÑ:
textâ ÑекÑÑ Ð²Ð½ÑÑÑи<option>,valueâ знаÑение,defaultSelectedâ еÑлиtrue, Ñо ÑÑавиÑÑÑ HTML-аÑÑибÑÑselected,selectedâ еÑлиtrue, Ñо ÑлеменÑ<option>бÑÐ´ÐµÑ Ð²ÑбÑаннÑм.
ТÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ°Ñ Ð¿ÑÑаниÑа Ñ defaultSelected и selected. ÐÑÑ Ð¿ÑоÑÑо: defaultSelected задаÑÑ HTML-аÑÑибÑÑ, его можно полÑÑиÑÑ ÐºÐ°Ðº option.getAttribute('selected'), а selected â вÑбÑано знаÑение или неÑ, именно его важно поÑÑавиÑÑ Ð¿ÑавилÑно. ÐпÑоÑем, обÑÑно ÑÑавÑÑ Ð¾Ð±Ð° ÑÑиÑ
знаÑÐµÐ½Ð¸Ñ Ð² true или не ÑÑавÑÑ Ð²Ð¾Ð²Ñе (Ñ.е. false).
ÐÑимеÑ:
let option = new Option("ТекÑÑ", "value");
// ÑоздаÑÑ <option value="value">ТекÑÑ</option>
Ð¢Ð¾Ñ Ð¶Ðµ ÑлеменÑ, но вÑбÑаннÑй:
let option = new Option("ТекÑÑ", "value", true, true);
ÐлеменÑÑ <option> имеÑÑ ÑвойÑÑва:
option.selected- ÐÑбÑана ли опÑиÑ.
option.index- ÐÐ¾Ð¼ÐµÑ Ð¾Ð¿Ñии ÑÑеди дÑÑгиÑ
в ÑпиÑке
<select>. option.value- ÐнаÑение опÑии.
option.text- СодеÑжимое опÑии (Ñо, ÑÑо Ð²Ð¸Ð´Ð¸Ñ Ð¿Ð¾ÑеÑиÑелÑ).
СÑÑлки
- СпеÑиÑикаÑиÑ: https://html.spec.whatwg.org/multipage/forms.html.
ÐÑого
СвойÑÑва Ð´Ð»Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñии по ÑоÑмам:
document.forms- ФоÑма доÑÑÑпна ÑеÑез
document.forms[name/index]. form.elements- ÐлеменÑÑ ÑоÑÐ¼Ñ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ ÑеÑез
form.elements[name/index], или можно пÑоÑÑо иÑполÑзоваÑÑform[name/index]. СвойÑÑвоelementsÑакже ÑабоÑÐ°ÐµÑ Ð´Ð»Ñ<fieldset>. element.form- ÐлеменÑÑ Ñ
ÑанÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÐ²Ð¾Ñ ÑоÑÐ¼Ñ Ð² ÑвойÑÑве
form.
ÐнаÑÐµÐ½Ð¸Ñ ÑлеменÑов ÑоÑÐ¼Ñ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ ÑеÑез input.value, textarea.value, select.value и Ñ.д. либо input.checked Ð´Ð»Ñ ÑекбокÑов и пеÑеклÑÑаÑелей.
ÐÐ»Ñ ÑлеменÑа <select> Ð¼Ñ Ñакже можем полÑÑиÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²ÑбÑанного пÑнкÑа ÑеÑез select.selectedIndex, либо иÑполÑзÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑÐ¸Ñ Ð¿ÑнкÑов select.options.
ÐÑо бÑли оÑÐ½Ð¾Ð²Ñ Ð´Ð»Ñ Ð½Ð°Ñала ÑабоÑÑ Ñ ÑоÑмами. Ðалее в ÑÑебнике Ð¼Ñ Ð²ÑÑÑеÑим еÑÑ Ð¼Ð½Ð¾Ð³Ð¾ пÑимеÑов.
Ð ÑледÑÑÑей главе Ð¼Ñ ÑаÑÑмоÑÑим Ñакие ÑобÑÑиÑ, как focus и blur, коÑоÑÑе могÑÑ Ð¿ÑоиÑÑ
одиÑÑ Ð½Ð° лÑбом ÑлеменÑе, но ÑаÑе вÑего обÑабаÑÑваÑÑÑÑ Ð² ÑоÑмаÑ
.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)