Estoy atascado en descifrar la lógica para hacer accesible un teclado de menú desplegable.jQuery averiguando si parent ha perdido 'focus'
El HTML está estructurado como tal (nombres de clase extra que se usa para mayor claridad):
<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>
Link 1 y Link 2, cuando se cernía, mostrará las listas de sub-menú (menú desplegable). Tengo esto funcionando bien con algunos jQuery y el jQuery hoverIntent plugin.
El problema es que esto solo funciona con el mouse en este momento.
El siguiente reto es hacer que esto funcione a través del teclado.
puedo añadir fácilmente un evento de foco a los enlaces de nivel superior, que luego desencadenan los menús secundarios:
$('ul.primaryMenuItem a:first').focus([call showMenu function])
que funciona bien.
Para cerrar el menú, una opción es, al abrir otro menú, verificar si ya hay otro abierto y, de ser así, cerrarlo.
Eso también funciona bien.
Donde eso falla, sin embargo, es si tiene el último menú abierto, y la tabulación fuera de él. Como no has tabulado en otro menú, este permanece abierto.
El desafío es descubrir cómo/cuándo cerrar el menú y la lógica necesaria (jQuery) para resolverlo. Idealmente, cerraría el menú cuando el foco esté en un elemento de la página OTROS que cualquiera de los elementos secundarios del menú.
Lógicamente, estoy buscando para ello:
$('li.primaryMenuItem').blur([close $(this).find('ul.popUpMenu'))
Sin embargo, no se puede hacer eso, ya que el LI no tiene realmente el foco, sino más bien la etiqueta de anclaje dentro de ella.
¿Alguna sugerencia?
ACTUALIZACIÓN:
tal vez una manera mejor/más fácil de hacer la pregunta:
Via jQuery, ¿hay una forma de 'reloj' para ver si el foco se ha movido fuera de todos los hijos de un objeto particular ?
¿Hay un error tipográfico? '$ ('ul.primaryMenuItem a: first'). focus ([call showMenu function])' -> '$ ('li.primaryMenuItem a: first'). focus ...' – superjos