<input>ê³¼ ê°ì´ í¼(form) ì¡°ìì ì¬ì©ëë ìììë í¹ë³í íë¡í¼í°ì ì´ë²¤í¸ê° ë§ìµëë¤.
ì´ íë¡í¼í°ì ì´ë²¤í¸ë¤ì ìµíê³ ëë©´ í¼ì ë¤ë£¨ê¸°ê° í¨ì¬ í¸ë¦¬í´ì§ ê²ëë¤.
í¼ê³¼ ìì íìí기
í¼ì í¹ìí 컬ë ì
ì¸ document.formsì 구ì±ìì
ëë¤.
document.formsë ì´ë¦ê³¼ ììê° ìë '기ëª
컬ë ì
(named collection)'ì
ëë¤. ê°ë°ìë ì´ ì´ë¦ì´ë ìì를 ì¬ì©í´ 문ì ë´ì í¼ì ì ê·¼í ì ììµëë¤.
document.forms.my - ì´ë¦ì´ '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"> ìì
// ìì ì»ê¸°
let elem = form.elements.one; // <input name="one"> ìì
alert(elem.value); // 1
</script>
ê·¸ë°ë° ê°ë°ì íë¤ ë³´ë©´ ì´ë¦ì´ ê°ì ìì ì¬ë¬ ê°ë¥¼ ë¤ë¤ì¼ íë ê²½ì°ê° ì기기ë í©ëë¤. ë¼ëì¤ ë²í¼ì ë¤ë£° ë ì´ë° ìí©ì´ ì주 ë°ìíì£ .
ì´ë 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
// ì´ë¦ì ì¬ì©í´ formê³¼ fieldset 모ëìì inputì 구í ì ììµëë¤.
alert(fieldset.elements.login == form.elements.login); // true
</script>
</body>
form.nameì§§ì í기ë²ì¸ form[index/name]ì¼ë¡ë ììì ì ê·¼í ì ììµëë¤.
form.elements.login ëì form.loginì²ë¼ ì¸ ì ìì£ .
form.nameì ì¬ì©í í기ë²ì ì ìëí긴 íì§ë§ ììì ì ê·¼í´ name ìì±ì ë³ê²½í´ë ë³ê²½ ì ì´ë¦ì ê³ì ì¬ì©í ì ìë¤ë 문ì ê° ììµëë¤(ë¬¼ë¡ ìë¡ì´ ì´ë¦ë ì¬ì©í ì ììµëë¤).
ìì를 íµí´ íì¸í´ ë´ ìë¤.
<form id="form">
<input name="login">
</form>
<script>
alert(form.elements.login == form.login); // true, ëì¼í <input>ì
ëë¤.
form.login.name = "username"; // inputì name ìì±ì ë³ê²½í©ëë¤.
// form.elementsìë name ìì± ë³ê²½ì´ ë°ìëììµëë¤.
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>
// í¼ -> ìì
let login = form.login;
// ìì -> í¼
alert(login.form); // HTMLFormElement
</script>
í¼ ìì
ì´ì í¼ ì¡°ìì ì¬ì©ëë ììë¤ì ëí´ ì´í´ë´ ìë¤.
inputê³¼ textarea
inputê³¼ textarea ììì ê°ì input.value (string) ëë input.checked(boolean)ì ì¬ì©í´ ì»ì ì ììµëë¤.
ì´ë ê² ë§ì´ì£ .
input.value = "New value";
textarea.value = "New text";
input.checked = true; // ì²´í¬ë°ì¤ë ë¼ëì¤ ë²í¼ìì ì¸ ì ììµëë¤.
textarea.innerHTML ë§ê³ textarea.value를 ì¬ì©íì¸ì.<textarea>...</textarea>ìì ê°ì´ HTMLì´ëë¼ë ê°ì ì»ì ë textarea.innerHTMLì ì¬ì©íì§ ë§ìì¼ í©ëë¤.
textarea.innerHTMLì íì´ì§ë¥¼ ì²ì ì´ ë¹ìì HTMLë§ ì ì¥ëì´ ìµì ê°ì 구í ì ì기 ë문ì
ëë¤.
selectì option
<select> ìììë ì¸ ê°ì§ ì¤ì íë¡í¼í°ê° ììµëë¤.
select.optionsâ<option>íì ìì를 ë´ê³ ìë 컬ë ì select.valueâ íì¬ ì íë<option>ê°select.selectedIndexâ íì¬ ì íë<option>ì ë²í¸(ì¸ë±ì¤)
ì´ ì¸ íë¡í¼í°ë¥¼ ìì©íë©´ ìëì ê°ì ì¸ ê°ì§ ë°©ë²ì¼ë¡ <select>ì ê°ì ì¤ì í ì ììµëë¤.
- ì¡°ê±´ì ë§ë
<option>íì ìì를 ì°¾ìoption.selectedìì±ìtrueë¡ ì¤ì í©ëë¤. select.value를 ìíë ê°ì¼ë¡ ì¤ì í©ëë¤.select.selectedIndex를 ìíë option ë²í¸ë¡ ì¤ì í©ëë¤.
ì¸ ë°©ë² ì¤ ì²« ë²ì§¸ ë°©ë²ì´ ê°ì¥ íì¤íì§ë§ ë ë²ì§¸ë ì¸ ë²ì§¸ ë°©ë²ì´ ëì²´ë¡ ë í¸ë¦¬í©ëë¤.
ìì:
<select id="select">
<option value="apple">Apple</option>
<option value="pear">Pear</option>
<option value="banana">Banana</option>
</select>
<script>
// ì¸ ê°ì§ ì½ëì ì¤í ê²°ê³¼ë 모ë ê°ìµëë¤.
select.options[2].selected = true;
select.selectedIndex = 2;
select.value = 'banana';
</script>
ëë¶ë¶ì ë¤ë¥¸ í¼ ì¡°ì ììì ë¬ë¦¬ <select>ë multiple ìì±ì´ ìë ê²½ì° optionì ë¤ì¤ ì íí ì ììµëë¤. multiple ìì±ì ì°ë ê²½ì°ë ì주 ë물ì§ë§, ì°ê² ëë¤ë©´ 첫 ë²ì§¸ ë°©ë²ì ì¬ì©í´ <option> íì ììì ìë selected íë¡í¼í°ë¥¼ ì¶ê°Â·ì ê±°í´ì¼ í©ëë¤.
ì íë ì¬ë¬ ê°ì optionì´ ë´ê¸´ 컬ë ì
ì ë¤ì ììì²ë¼ select.options를 ì¬ì©í´ ì»ì ì ììµëë¤.
<select id="select" multiple>
<option value="blues" selected>Blues</option>
<option value="rock" selected>Rock</option>
<option value="classic">Classic</option>
</select>
<script>
// ì íí ê° ì ì²´
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.
Option ìì±ì
Option ìì±ìë ì ì¬ì©ëì§ë ìì§ë§ í¥ë¯¸ë¡ì´ ì ì´ ììµëë¤.
ëª
ì¸ì를 ë³´ë©´ <option> ìì를 ìì±íë ê°ë¨íê³ ë©ì§ 문ë²ì ì°¾ì ì ìì£ .
option = new Option(text, value, defaultSelected, selected);
매ê°ë³ì:
textâ option ë´ë¶ì í ì¤í¸valueâ optionì ê°defaultSelectedâtrueì´ë©´ HTML ìì±selectedê° ìì±ë¨selectedâtrueì´ë©´ í´ë¹ optionì´ ì íë¨
defaultSelectedì selectedì ì°¨ì´ê° 무ìì¸ì§ í·ê°ë¦´ ì ììµëë¤. defaultSelectedë option.getAttribute('selected')를 ì¬ì©í´ ì»ì ì ìë HTML ìì±ì ì¤ì í´ ì¤ëë¤. ë°ë©´ selected ë optionì ì í ì¬ë¶ë¥¼ ê²°ì í©ëë¤. ê·¸ë 기 ë문ì ë¹ì°í selectedê° ë ì¤ìí 매ê°ë³ìì´ì£ . Option ìì±ì를 ì¬ì©í ëë ëê° ë 매ê°ë³ì 모ë를 trueë falseë¡ ì¤ì í©ëë¤.
ìì:
let option = new Option("Text", "value");
// <option value="value">Text</option> ê° ìì±ë©ëë¤.
ì´ë²ì ê°ì ìì를 ì íë ìíë¡ ìì±í©ëë¤.
let option = new Option("Text", "value", true, true);
Optionì ì¬ì©í´ ë§ë ìììë ë¤ìê³¼ ê°ì íë¡í¼í°ê° ììµëë¤.
option.selected- optionì ì í ì¬ë¶
option.index- option ì¤ ëª ë²ì§¸ì¸ì§ë¥¼ ëíë´ë ë²í¸
option.text- ì¬ì©ìê° ë³´ê² ë í ì¤í¸
ì°¸ê³ ìë£
ìì½
í¼ íìí기
document.formsdocument.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ë option 컬ë ì
select.optionsì íµí´ ê°ì 구í ìë ììµëë¤.
ì§ê¸ê¹ì§ë í¼ ê´ë ¨ 기본ì ë¤ë¤ìµëë¤. ì´ íí 리ì¼ìì ìì¼ë¡ ë ë§ì ìì를 ë§ë ê²ì ëë¤.
ë¤ì ì±í°ììë ì´ë ììììë ë°ìí ì ìì§ë§ ëë¶ë¶ í¼ìì ì²ë¦¬ëë focusì blur ì´ë²¤í¸ë¥¼ ë¤ë£¨ê² ìµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.