ドロップダウンメニューのキーボードにアクセスできるようにするためのロジックを理解することに固執しています。
HTML は次のように構成されています (わかりやすくするために追加のクラス名が使用されています)。
<ul>
<li class="primaryMenuItem">
<a href="">Link 1</a>
<ul class="popUpMenu">
<li><a href="">Sub Link 1</a></li>
<li><a href="">Sub Link 2</a></li>
</ul>
</li>
<li class="primaryMenuItem">
<a href="">Link 2</a>
<ul class="popUpMenu">
<li><a href="">Sub Link 1</a></li>
<li><a href="">Sub Link 2</a></li>
</ul>
</li>
</ul>
リンク 1 とリンク 2 をホバーすると、サブメニュー リスト (プルダウン メニュー) が表示されます。これは、いくつかのjQueryとjQuery hoverIntentプラグインでうまく機能しています。
キャッチは、これが現時点でマウスでのみ機能することです。
次の課題は、これをキーボードで動作させることです。
トップ レベルのリンクにフォーカス イベントを簡単に追加して、セカンダリ メニューをトリガーすることができます。
$('ul.primaryMenuItem a:first').focus([call showMenu function])
それはうまくいきます。
メニューを閉じる方法の 1 つは、別のメニューを開くときに、別のメニューが既に開いているかどうかを確認し、開いている場合は閉じることです。
それもうまくいきます。
ただし、それが失敗するのは、最後のメニューを開いてタブから抜けた場合です。別のメニューにタブ移動していないため、このメニューは開いたままです。
課題は、メニューを閉じる方法/タイミングと、それを把握するために必要なロジック (jQuery) を把握することです。理想的には、メニューの子要素以外のページ上の要素にフォーカスがある場合は、メニューを閉じます。
論理的に、私はこれを探しています:
$('li.primaryMenuItem').blur([close $(this).find('ul.popUpMenu'))
ただし、LI には実際にはフォーカスがなく、その中のアンカー タグがあるため、それはできません。
助言がありますか?
アップデート:
おそらく、質問をするためのより良い/簡単な方法:
jQuery経由で、フォーカスが特定のオブジェクトのすべての子の外に移動したかどうかを「監視」する方法はありますか?