jQuery找出父母是否失去了'焦点'

问题描述 投票:6回答:7

我一直想弄清楚使下拉菜单键盘可访问的逻辑。

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实际上没有焦点,而是其中的定位标记。

有什么建议吗?

更新:

也许是更好/更简单的方法来提出问题:

通过jQuery,有没有一种方法可以“观察”以查看焦点是否已移出特定对象的所有子对象?

jquery children blur
7个回答
6
投票

您可以使用事件冒泡检查关注focusin事件的内容。我成功完成了以下代码:


2
投票

使用新的jquery 1.4函数:focusinfocusin而不是focusoutfocusoutblur的区别如下:


2
投票

如何执行以下操作:


0
投票

尝试一下


0
投票

这帮助了我... $('li.primaryMenuItem:last').bind('myblur', function() ...);


0
投票

我有一个类似的问题...我创建了一个jsfiddle来确定父字段集何时失去焦点,然后调用一个函数。当然可以对其进行优化,但这只是一个开始。


0
投票

我想出了这个配方(香草JS),它完全符合OP的要求(提供一种监听“容器元素外部的焦点移动”的方法,并且通用性足以适用于任何用例。

© www.soinside.com 2019 - 2024. All rights reserved.