先看這個例子
這個單選清單是必填。第一項起初已選,但只是提示,value=""。「HTML 結構」和「版面配置」才有實際值。毋須送出表單,也毋須網絡請求,便可核對原生 validity。
| 情況 | 輸入或查看方法 | 結果與意思 |
|---|---|---|
| 起初提示 | 讀取 select.value 和 validity.valueMissing | 值空白;valueMissing=true |
| 揀 HTML 結構 | 選值 html | value=html;validity.valid=true |
| 揀版面配置 | 選值 css | value=css;validity.valid=true |
瀏覽器怎樣處理
這個 select 是必填、非多選,而且顯示為單行;第一個直接子 option 的空值項是提示選項。仍選提示時,控制項欠值;揀有值的實際選項後,欠值狀態才消失。下拉視窗的樣式依瀏覽器和作業系統而定。
提示項有了非空值,就可能被當成已填
反例把提示項的 value 設為 choose。文字仍叫人選主題,控制項卻已有非空選取值。
<label for="topic">工作坊主題</label><select id="topic" required><option value="choose" selected>請選主題</option><option value="html">HTML 結構</option></select>反例仍選提示項時,valueMissing=false、valid=true。正例的空值提示則正確表示欠值。
試着修正
第三個實際選項叫「沒有偏好」,本意是完整答案,應否也用空值?
查看參考答案
應用不同的非空值,例如 any。本例空值留給未選提示。只靠顯示文字,原生 validity 分不清這兩種意思。
- 揀實際項目前後,各查一次 validity。
- 核對值和標籤,不假定各系統選單外觀相同。