field-select
ネイティブの select を field で包んだものです。選択肢が十を超えると select は select.js の絞り込みコンボボックスを有効にしますが、フォームが送信するのは変わらずネイティブの select です。
3つの選択肢:ネイティブの select
これは <section rst-box><form rst-form> の中に置きます。
<div rst-field >
<label rst-field-label for ="sel_few" >役割</label >
<select rst-input id ="sel_few" name ="sel_few" >
<option value ="admin" selected >管理者</option >
<option value ="editor" >編集者</option >
<option value ="member" >メンバー</option >
</select >
</div >
これは <section rst-box><form rst-form> の中に置きます。
{{ template "field-select" dict
"ID" "sel_few"
"Name" "sel_few"
"Label" "役割"
"Options" (list
(dict "Label" "管理者" "Selected" true "Value" "admin" )
(dict "Label" "編集者" "Value" "editor" )
(dict "Label" "メンバー" "Value" "member" ))}}
12個の選択肢:絞り込みできるコンボボックス
これは <section rst-box><form rst-form> の中に置きます。
<div rst-field >
<label rst-field-label for ="sel_many" >都市</label >
<select rst-input id ="sel_many" name ="sel_many" data-rst-select data-rst-select-filter ="入力して絞り込む" data-rst-select-results ="{n} 件" data-rst-select-result-one ="1 件" data-rst-select-no-matches ="一致する項目はありません" aria-describedby ="sel_many-help" >
<option value ="dublin" selected >ダブリン</option >
<option value ="lisbon" >リスボン</option >
<option value ="madrid" >マドリード</option >
<option value ="berlin" >ベルリン</option >
<option value ="rome" >ローマ</option >
<option value ="athens" >アテネ</option >
<option value ="helsinki" >ヘルシンキ</option >
<option value ="reykjavík" >レイキャビク</option >
<option value ="warsaw" >ワルシャワ</option >
<option value ="zagreb" >ザグレブ</option >
<option value ="tallinn" >タリン</option >
<option value ="valletta" >バレッタ</option >
</select >
<p rst-field-help id ="sel_many-help" >入力すると絞り込めます。</p >
</div >
これは <section rst-box><form rst-form> の中に置きます。
{{ template "field-select" dict
"ID" "sel_many"
"Name" "sel_many"
"Label" "都市"
"Options" (list
(dict "Label" "ダブリン" "Selected" true "Value" "dublin" )
(dict "Label" "リスボン" "Value" "lisbon" )
(dict "Label" "マドリード" "Value" "madrid" )
(dict "Label" "ベルリン" "Value" "berlin" )
(dict "Label" "ローマ" "Value" "rome" )
(dict "Label" "アテネ" "Value" "athens" )
(dict "Label" "ヘルシンキ" "Value" "helsinki" )
(dict "Label" "レイキャビク" "Value" "reykjavík" )
(dict "Label" "ワルシャワ" "Value" "warsaw" )
(dict "Label" "ザグレブ" "Value" "zagreb" )
(dict "Label" "タリン" "Value" "tallinn" )
(dict "Label" "バレッタ" "Value" "valletta" ))
"Help" "入力すると絞り込めます。" }}
選択肢が十を超えると、部品は select.js を有効にします。十未満では有効にしません。ひと握りの項目を検索させるのは、助けではなく家具だからです。
選択肢が 12、Plain:拡張を断った場合
これは <section rst-box><form rst-form> の中に置きます。
<div rst-field >
<label rst-field-label for ="sel_plain" >都市</label >
<select rst-input id ="sel_plain" name ="sel_plain" >
<option value ="dublin" selected >ダブリン</option >
<option value ="lisbon" >リスボン</option >
<option value ="madrid" >マドリード</option >
<option value ="berlin" >ベルリン</option >
<option value ="rome" >ローマ</option >
<option value ="athens" >アテネ</option >
<option value ="helsinki" >ヘルシンキ</option >
<option value ="reykjavík" >レイキャビク</option >
<option value ="warsaw" >ワルシャワ</option >
<option value ="zagreb" >ザグレブ</option >
<option value ="tallinn" >タリン</option >
<option value ="valletta" >バレッタ</option >
</select >
</div >
これは <section rst-box><form rst-form> の中に置きます。
{{ template "field-select" dict
"ID" "sel_plain"
"Name" "sel_plain"
"Label" "都市"
"Options" (list
(dict "Label" "ダブリン" "Selected" true "Value" "dublin" )
(dict "Label" "リスボン" "Value" "lisbon" )
(dict "Label" "マドリード" "Value" "madrid" )
(dict "Label" "ベルリン" "Value" "berlin" )
(dict "Label" "ローマ" "Value" "rome" )
(dict "Label" "アテネ" "Value" "athens" )
(dict "Label" "ヘルシンキ" "Value" "helsinki" )
(dict "Label" "レイキャビク" "Value" "reykjavík" )
(dict "Label" "ワルシャワ" "Value" "warsaw" )
(dict "Label" "ザグレブ" "Value" "zagreb" )
(dict "Label" "タリン" "Value" "tallinn" )
(dict "Label" "バレッタ" "Value" "valletta" ))
"Plain" true }}
必須、エラーつき
これは <section rst-box><form rst-form> の中に置きます。
<div rst-field >
<label rst-field-label for ="sel_error" >役割</label >
<select rst-input id ="sel_error" name ="sel_error" required aria-invalid ="true" aria-describedby ="sel_error-error" >
<option value ="admin" selected >管理者</option >
<option value ="editor" >編集者</option >
<option value ="member" >メンバー</option >
</select >
<p rst-field-error id ="sel_error-error" role ="alert" >この人の役割を選んでください。</p >
</div >
これは <section rst-box><form rst-form> の中に置きます。
{{ template "field-select" dict
"ID" "sel_error"
"Name" "sel_error"
"Label" "役割"
"Options" (list
(dict "Label" "管理者" "Selected" true "Value" "admin" )
(dict "Label" "編集者" "Value" "editor" )
(dict "Label" "メンバー" "Value" "member" ))
"Required" true
"Error" "この人の役割を選んでください。" }}
手書き、optgroup つき
これは <section rst-box><form rst-form> の中に置きます。
<div rst-field >
<label rst-field-label for ="sel_grouped" >地域</label >
<select rst-input id ="sel_grouped" name ="sel_grouped" data-rst-select data-rst-select-filter ="入力して絞り込む" data-rst-select-results ="{n} 件" data-rst-select-result-one ="1 件" data-rst-select-no-matches ="一致する項目はありません" >
<optgroup label ="ヨーロッパ" >
<option value ="dublin" selected >ダブリン</option >
<option value ="lisbon" >リスボン</option >
<option value ="warsaw" >ワルシャワ</option >
</optgroup >
<optgroup label ="南北アメリカ" >
<option value ="montreal" >モントリオール</option >
<option value ="lima" >リマ</option >
<option value ="austin" >オースティン</option >
</optgroup >
<optgroup label ="アジア" >
<option value ="osaka" >大阪</option >
<option value ="hanoi" >ハノイ</option >
<option value ="dhaka" >ダッカ</option >
</optgroup >
<optgroup label ="アフリカ" >
<option value ="accra" >アクラ</option >
<option value ="nairobi" >ナイロビ</option >
<option value ="tunis" >チュニス</option >
</optgroup >
</select >
</div >
ここでの Options は平坦なリストなので、グループ化した選択肢はアプリ側が書くマークアップです。select.js はグループを捨てずに描画します。手書きの select は data-rst-select="false" で拡張そのものを断ることもできます。