Я застрял в поиске логики, чтобы сделать клавиатуру выпадающего меню доступной.
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])
Это прекрасно работает.
Чтобы закрыть меню, можно при открытии другого меню проверить, есть ли уже другое открытое окно, и, если это так, закрыть его.
Это тоже отлично работает.
Однако, если это не удастся, если у вас открыто последнее меню и из него открыта вкладка. Поскольку вы не открыли другое меню, оно остается открытым.
Задача состоит в том, чтобы выяснить, как / когда закрывать меню, и в какой логике (jQuery) это выяснить. В идеале, я бы закрыл меню, когда фокус на элементе на странице ДРУГОЙ, чем на любом из дочерних элементов меню.
Логично, я ищу это:
$('li.primaryMenuItem').blur([close $(this).find('ul.popUpMenu'))
Однако вы не можете этого сделать, так как на самом деле у LI нет фокуса, а есть тег привязки внутри него.
Есть предложения?
UPDATE:
возможно, лучший / более простой способ задать вопрос:
Через jQuery, есть ли способ «посмотреть», чтобы увидеть, переместился ли фокус за пределы всех дочерних элементов определенного объекта?