<input type="text">
本質的にフォーカス可能である(のように)か、または持っているなどの理由で、フォーカス可能な要素でいっぱいのドキュメントがあるとしましょうtabindex="0"
。
ここで、モーダルダイアログボックスとして表示したいドキュメントのセクションがあり、ユーザーがダイアログボックスの外側に気を取られてほしくない場合を考えてみましょう。タブキーで、ダイアログボックスのコンテナ要素内のフォーカス可能な要素のみを循環させたいと思います。これを行う最も簡単な方法は何ですか?
可能であれば、ダイアログの内容やページの残りの部分を気にせず、それらを変更しようとしない解決策を探しています。つまり、たとえば、ダイアログの外側の要素をフォーカスできないようにしたくありません。まず、これには、可逆的な変更を行い、状態を追跡する必要があります。第二に、これには、要素をフォーカス可能にするためのすべての可能な方法を知る必要があります。これは、私には厄介で、壊れやすく、拡張性がないように感じます。
私の最初の試みはこのように見えますが、順方向(Tabキーを押す)でのみ機能します。逆方向(Shift + Tabを押す)では機能しません。
<div>Focusable stuff outside the dialog.</div>
<div class="dialog" tabindex="0">
<!-- Focus should be trapped inside this dialog while it's open -->
<div class="content">
Form contents and focusable stuff here.
</div>
<div class="last-focus" tabindex="0" onfocus="this.parentNode.focus()"></div>
</div>
<div>More focusable stuff outside the dialog.</div>
純粋なJavaScriptソリューションが欲しいです。jQueryなどのライブラリでこれを行う手段がある場合は、これを行うライブラリコードへのリンクをお勧めします。