для Epic Skills
Зачем нужен атрибут name
?
HTML
<form id="my-form">...</form>
|
HTML
<form name="my-form">...</form>
|
JavaScript
document.getElementById("my-form");
|
JavaScript
document.forms["my-form"]; document.forms[0];
|
Без name |
С name |
Свойство формы elements содержит коллекцию всех значащих элементов
HTML
<form name="form"> <input name="text-input" type="text"> </form>
|
JavaScript
var form = document.forms.form;
form.elements["text-input"];
form.elements[0];
|
Элементы формы с потомками так же имеют свойство elements
HTML
<form name="form"> <fieldset name="fieldset"> <input name="text-input" type="text"> </fieldset> </form>
|
JavaScript
var form = document.forms.form; var fields = form.elements.fieldset; fields.elements["text-input"];
|
Получить доступ к элементам формы можно не только через form.elements[name/index]
, но и проще: form[index/name]
.
Этот способ короче, но обладает одной неприятной особенностью: если к элементу обратиться по его name, а потом свойство name изменить, то он по-прежнему будет доступен под старым именем.
Элементы формы ссылаются на свою форму через свойство form
HTML
<form> <fieldset name="fieldset"> <input id="input" type="text"> </fieldset> </form>
|
JavaScript
var input = document.getElementById("input"); input.form;
|
Текущее значение элемента формы можно получить через свойство value
HTML
<form name="form"> <fieldset name="fieldset"> <input name="input" type="text"> </fieldset> </form>
|
JavaScript
document.forms[0].elements.input.value;
|
Свойство value
элемента select
соответствует свойству value
выбранного в данный момент элемента option
HTML
<form name="form"> <select name="select"> <option value="0"> First option </option> </select> </form>
|
JavaScript
document.forms[0].elements.select.value;
|
Свойство selectedIndex
элемента select
указывает на позицию в списке выбранного в данный момент элемента option
HTML
<select name="select"> <option value="0"> First option </option> </select> |
JavaScript
var s = document.forms[0].elements.select;
s.selectedIndex;
|
Установка selectedIndex = -1
очистит выбор.
Список всех опций select
можно получить через его свойство options
HTML
<select name="select"> <option value="0"> First option </option> <option value="1"> Second option </option> </select> |
JavaScript
var s = document.forms[0].elements.select;
s.options;
|
Новую опцию можно создать с помощью конструктора new Option
. Добавить опцию в select
можно методом add
.
JavaScript
var s = document.forms[0].elements.select; var opt = new Option(text, value, dafaultSelected, selected); var opt = new Option("Text", 123, false, true); s.add(opt, index); s.add(opt, 2);
|
Значение поля checkbox
можно забрать через свойство checked
HTML
<input type="checkbox" name="checkbox" checked> |
JavaScript
var c = document.forms[0].elements.checkbox;
c.checked;
|
Значение radio
можно забрать через свойство value
HTML
<input type="radio" name="radio" value="1"> <input type="radio" name="radio" value="2"> <input type="radio" name="radio" value="3"> |
JavaScript
var c = document.forms[0].elements.radio;
c.value;
|
Фокус на полях можно не только слушать, но и принудительно выставлять
HTML
<input type="text" name="input">
|
JavaScript
var text = document.forms[0].elements.input; text.addEventListener("focus", function(e){ console.log("focus"); }, true); text.focus();
|
Фокус точно также можно и убирать
HTML
<input type="text" name="input" autofocus>
|
JavaScript
var text = document.forms[0].elements.input; text.addEventListener("blur", function(e){ console.log("blur"); }, true); text.blur();
|
Кстати, текущий элемент, на котором фокус, доступен как document.activeElement
.
Событие change
происходит по окончании изменении значения элемента формы, когда это изменение зафиксировано.
HTML
<input type="text" name="input">
|
JavaScript
var text = document.forms[0].elements.input; text.addEventListener("change", function(e){ console.log("change"); });
|
Событие input
срабатывает тут же при изменении значения текстового элемента.
HTML
<input type="text" name="input">
|
JavaScript
var text = document.forms[0].elements.input; text.addEventListener("input", function(e){ console.log("input"); }); |
Событие change
происходит по окончании изменении значения элемента формы, когда это изменение зафиксировано.
JavaScript
var text = document.forms[0].elements.input; var events = ["copy", "paste", "cut"]; for (var i = 0, len = events.length; i < len; i++) { text.addEventListener(events[i], function(event) { event.preventDefault(); }); } |
Чтобы отправить форму на сервер, можно либо нажать кнопку <input type="submit">
или <input type="image">
, либо нажать Enter, находясь на каком-нибудь поле.
HTML
<form name="form"> <input name="text-input" type="text"> </form>
|
JavaScript
var form = document.forms[0]; text.addEventListener("submit", function(e){ console.log("submit"); }); form.submit();
|