表åï¼formï¼ä»¥åä¾å¦ <input> çæ§ä»¶ï¼controlï¼å
ç´ æè®¸å¤ç¹æ®ç屿§åäºä»¶ã
彿们å¦ä¹ äºè¿äºç¸å ³å 容åï¼å¤ç表åä¼å徿´å æ¹ä¾¿ã
导èªï¼è¡¨ååå ç´
ææ¡£ä¸çè¡¨åæ¯ç¹æ®éå document.forms çæåã
è¿å°±æ¯æè°çâå½åçéåâï¼æ¢æ¯è¢«å½åäºçï¼ä¹æ¯æåºçãæä»¬æ¢å¯ä»¥ä½¿ç¨ååï¼ä¹å¯ä»¥ä½¿ç¨å¨ææ¡£ä¸çç¼å·æ¥è·å表åã
document.forms.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"> å
ç´
// è·å表åä¸çå
ç´
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>
è¿äºå¯¼èªï¼navigationï¼å±æ§å¹¶ä¸ä¾èµäºæ ç¾çç»æãææçæ§ä»¶å
ç´ ï¼æ 论å®ä»¬å¨è¡¨å䏿夿·±ï¼é½å¯ä»¥éè¿ form.elements è·åå°ã
ä¸ä¸ªè¡¨åå
伿ä¸ä¸ªæå¤ä¸ª <fieldset> å
ç´ ãå®ä»¬ä¹å
·æ elements 屿§ï¼è¯¥å±æ§ååºäº <fieldset> ä¸çè¡¨åæ§ä»¶ã
ä¾å¦ï¼
<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 ä¸è·å input
alert(fieldset.elements.login == form.elements.login); // true
</script>
</body>
form.nameè¿æä¸ä¸ªæ´ç®çç表示æ¹å¼ï¼æä»¬å¯ä»¥éè¿ form[index/name] æ¥è®¿é®å
ç´ ã
æ¢å¥è¯è¯´ï¼æä»¬å¯ä»¥å° form.elements.login åæ form.loginã
è¿ä¹ææï¼ä½æ¯ä¼æä¸ä¸ªå°é®é¢ï¼å¦ææä»¬è®¿é®ä¸ä¸ªå
ç´ ï¼ç¶åä¿®æ¹å®ç nameï¼ä¹åå®ä»ç¶å¯ä»¥è¢«éè¿æ§ç 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>
// form -> element
let login = form.login;
// element -> form
alert(login.form); // HTMLFormElement
</script>
表åå ç´
让æä»¬æ¥è°è°è¡¨åæ§ä»¶ã
input å textarea
æä»¬å¯ä»¥éè¿ input.valueï¼åç¬¦ä¸²ï¼æ input.checkedï¼å¸å°å¼ï¼æ¥è®¿é®å¤éæ¡ï¼checkboxï¼ååéæé®ï¼radio buttonï¼ä¸ç valueã
åè¿æ ·ï¼
input.value = "New value";
textarea.value = "New text";
input.checked = true; // 对äºå¤éæ¡ï¼checkboxï¼æåéæé®ï¼radio buttonï¼
textarea.value è䏿¯ textarea.innerHTML请注æï¼å³ä½¿ <textarea>...</textarea> å°å®ä»¬ç value ä½ä¸ºåµå¥ç HTML æ ç¾æ¥ä¿åï¼æä»¬ä¹ç»ä¸åºè¯¥ä½¿ç¨ textarea.innerHTML æ¥è®¿é®å®ã
å®ä»
å卿åå¨é¡µé¢ä¸ç HTMLï¼è䏿¯åå¨çå½å valueã
select å option
ä¸ä¸ª <select> å
ç´ æ 3 个éè¦ç屿§ï¼
select.optionsââ<option>çåå ç´ çéåï¼select.valueââ å½åæéæ©ç<option>ç valueï¼select.selectedIndexââ å½åæéæ©ç<option>çç¼å·ã
å®ä»¬æä¾äºä¸ç§ä¸º <select> 设置 value çä¸åæ¹å¼ï¼
- æ¾å°å¯¹åºç
<option>å ç´ ï¼ä¾å¦å¨select.optionsä¸ï¼ï¼å¹¶å°å ¶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';
// 请注æï¼é项ç¼å·æ¯ä»é¶å¼å§çï¼æä»¥ç¼å· 2 è¡¨ç¤ºçæ¯ç¬¬ä¸é¡¹
</script>
å大夿°å
¶å®æ§ä»¶ä¸åï¼å¦æ <select> å
·æ multiple ç¹æ§ï¼attributeï¼ï¼åå
许å¤éã尽管è¿ä¸ªç¹æ§ï¼attributeï¼å¾å°è¢«ç¨å°ã
对äºå¤éçå¼ï¼ä½¿ç¨ç¬¬ä¸ç§è®¾ç½®å¼çæ¹å¼ï¼å¨ <option> åå
ç´ ä¸æ·»å /ç§»é¤ selected 屿§ã
è¿æ¯ä¸ä¸ªå¦ä½ä»å¤éç <select> ä¸è·åéæ©çå¼ç示ä¾ï¼
<select id="select" multiple>
<option value="blues" selected>Blues</option>
<option value="rock" selected>Rock</option>
<option value="classic">Classic</option>
</select>
<script>
// ä» multi-select ä¸è·åææéå®ç `value`
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 = new Option(text, value, defaultSelected, selected);
æ¤è¯æ³æ¯å¯éçãæä»¬å¯ä»¥ä½¿ç¨ document.createElement('option') å¹¶æå¨è®¾ç½®ç¹æ§ï¼attributeï¼ãä¸è¿ï¼è¿ç§è¯æ³åèµ·æ¥å¯è½ä¼æ´çï¼å
¶åæ°å¦ä¸ï¼
textââ<option>ä¸çææ¬ï¼valueââ<option>çvalueï¼defaultSelectedââ å¦æä¸ºtrueï¼é£ä¹selectedHTML-ç¹æ§ï¼attributeï¼å°±ä¼è¢«å建ï¼selectedââ å¦æä¸ºtrueï¼é£ä¹è¿ä¸ª<option>å°±ä¼è¢«éä¸ã
defaultSelected å selected çåºå«æ¯ï¼defaultSelected è®¾ç½®çæ¯ HTML-ç¹æ§ï¼attributeï¼ï¼æä»¬å¯ä»¥ä½¿ç¨ option.getAttribute('selected') æ¥è·å¾ãè selected è®¾ç½®çæ¯é项æ¯å¦è¢«éä¸ã
å¨å®é
使ç¨ä¸ï¼é常åºè¯¥å°åæ¶å°è¿ä¸¤ä¸ªå¼è®¾ç½®ä¸º true æ falseãï¼æè
ï¼ç´æ¥çç¥å®ä»¬ï¼ä¸¤è
é½é»è®¤ä¸º 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>å¨å ¶æå±ç<select>ä¸çç¼å·ãoption.text<option>çææ¬å 容ï¼å¯ä»¥è¢«è®¿é®è çå°ï¼ã
åèèµæ
æ»ç»
表å导èªï¼
document.forms- ä¸ä¸ªè¡¨åå
ç´ å¯ä»¥éè¿
document.forms[name/index]访é®å°ã form.elements- 表åå
ç´ å¯ä»¥éè¿
form.elements[name/index]çæ¹å¼è®¿é®ï¼æè ä¹å¯ä»¥ä½¿ç¨form[name/index]ãelements屿§ä¹éç¨äº<fieldset>ã element.form- å
ç´ éè¿
form屿§æ¥å¼ç¨å®ä»¬æå±ç表åã
value å¯ä»¥è¢«éè¿ input.valueï¼textarea.valueï¼select.value çæ¥è·åå°ãï¼å¯¹äºåéæé®ï¼radio buttonï¼åå¤éæ¡ï¼checkboxï¼ï¼å¯ä»¥ä½¿ç¨ input.checked æ¥ç¡®å®æ¯å¦éæ©äºä¸ä¸ªå¼ã
å¯¹äº <select>ï¼æä»¬å¯ä»¥éè¿ç´¢å¼ select.selectedIndex æ¥è·åå®ç valueï¼ä¹å¯ä»¥éè¿ <option> éå select.options æ¥è·åå®ç valueã
è¿äºæ¯å¼å§ä½¿ç¨è¡¨åçåºç¡ãæä»¬å°å¨æ¬æç¨ä¸è¿ä¸æ¥ä»ç»æ´å¤ç¤ºä¾ã
å¨ä¸ä¸ç« ä¸ï¼æä»¬å°ä»ç»å¯è½å¨ä»»ä½å
ç´ ä¸åºç°ï¼ä½ä¸»è¦å¨è¡¨åä¸å¤çç focus å blur äºä»¶ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼