我一直在搞清楚让下拉菜单键盘可访问的逻辑。jQuery搞清楚,如果父母已经失去了'重点'
的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'))
但是,你不能这样做,因为李实际上并没有重点,而是在它的锚标记。
有什么建议吗?
UPDATE:
也许是一个更好/更简单的方法来提出这样的问题:
通过jQuery,是有办法“手表”,看看重点已经移到特定对象的所有儿童的外?
是否有错字? '$('ul.primaryMenuItem a:first')。focus([call showMenu function])' - >'$('li.primaryMenuItem a:first')。焦点...' – superjos 2012-08-27 16:22:38