前の選択フィールドの値が特定の値に設定されている場合にのみ表示される選択フィールドを含むフォームがあります。国として "USA" が選択されている場合、非表示の "states" 選択フィールドが表示される簡略化されたバージョンを次に示します。
HTML:
<style>
label {
display:inline-block;
min-width:100px;
padding:3px;
}
.hidden{
display:none;
}
</style>
<div>
<label for="country">Country</label>
<select id="country">
<option>Czech Republic</option>
<option>USA</option>
</select>
</div>
<div id="stateContainer" class="hidden">
<label for="state">State</label>
<select id="state">
<option>Alabama</option>
<option>Arizona</option>
<option>Arkansas</option>
</select>
</div>
<div>
<label for="name">Name</label>
<input type="text" id="name" />
</div>
JS:
$(function(){
$("#country").on("change",function(){
if ( $(this).val() === "USA") {
$("#stateContainer").removeClass("hidden");
} else {
$("#stateContainer").addClass("hidden");
}
})
})
...そしてここにJSFiddleがあります:
http://jsfiddle.net/xoundboy/a2HdZ/5/
マウスを使用する場合は問題なく動作しますが、ユーザーがキーボード入力のみに制限されている場合、UX が壊れます。フォーカスが国フィールドにあり、上/下矢印を使用して国として「USA」を選択し、次にタブ キーを使用して次のフィールドに移動すると、これを確認できます。新しく表示された「状態」フィールドに移動する代わりに、「名前」フィールドにスキップします。
おそらくJSでタブキーの押下をキャプチャし、新しく表示されたフィールドにフォーカスを強制し、デフォルトの動作を防ぐことで修正できますが、それは醜いハックのようです. 非常に一般的なシナリオを処理するためのベスト プラクティスは何ですか?