fieldset
是一個新的html元素,用來群組化表單裡的input
元素
有了fieldset
我們可以很簡單的控制表單內的元素是否disabled
而不用一一指派每個input
元素
更棒的是我們能夠為fieldset
指定目標form
元素,因此完全破除了input
必須寫在form
裡的限制
即便HTML5已經為input
新增form
這個屬性來指定目標表單form
但有了filedset
,我們能夠更加合理的處理群組性的input
元素。
fieldset
可將表單form
關聯元素input
、select
..群組化。
filedset
元素內所有input
、button
等form
相關元素form
的id
fieldset
除了特定的三個屬性以外,也支援其他全域屬性
fieldset {
display: block;
margin-left: 2px;
margin-right: 2px;
padding-top: 0.35em;
padding-bottom: 0.625em;
padding-left: 0.75em;
padding-right: 0.75em;
border: 2px groove (internal value);
}
html
<fieldset form="signUpForm" disabled>
<legend>Sign Up</legend>
<input type="text" placeholder="First Name">
<input type="text" placeholder="Last Name">
<button type="submit" form="signUpForm">Submit</button>
</fieldset>
<button name="editButton" type="button">Edit</button>
<form style="display:none;" id="signUpForm" action="#" method="post"></form>
javascript
document.querySelector('[name="editButton"]')
.addEventListener('click', event => {
toggleFormEdit(document.querySelector('[form="signUpForm"]'))
})
function toggleFormEdit(formElem) {
const isDisabled = formElem.hasAttribute('disabled')
const firstInput = formElem.querySelector('input')
if(isDisabled) {
formElem.removeAttribute('disabled')
firstInput.focus()
} else {
formElem.setAttribute('disabled', 'disabled')
}
}
範例 JSBin
此範例展示了如何用javascript
禁用與啟用fieldset
大家可以注意到,我們不用依序設定fieldset
裡頭的元素
只需要控制fieldset
的disabled
與否即可,就連submitbutton
也不例外
並且在範例中特意地將form
的disable
設為none
強調完全隱藏表單元素
但我們依然可以使用fieldset
與button
搭配屬性form
來submit該表單。
仔細的讀者可能會發現到fieldset
裡的submitbutton
依舊加上了屬性form
原因是,雖然改變field
的disabled
可以一起控制該button
是否可以點擊
但button
並沒有繼承fieldset
的屬性name
值,因此還是需要明確指定表單名稱id
順帶一提元素legend
用以語易化的表示元素form
的title