Jquery 检查div是否有键盘焦点

Jquery 检查div是否有键盘焦点,jquery,keyboard,focus,mouse,Jquery,Keyboard,Focus,Mouse,我有一个div,在鼠标离开该区域5秒后自动隐藏。如果div中的任何元素具有键盘焦点,我希望防止这种隐藏,如果用户跳出,则重新启用。这是我的密码 delayedRollUp = function() { if ( !$metaArea.hasClass('active') ) { var timeout = setTimeout(function(){ animateRollUp( $metaTab ); }, 5000 );

我有一个div,在鼠标离开该区域5秒后自动隐藏。如果div中的任何元素具有键盘焦点,我希望防止这种隐藏,如果用户跳出,则重新启用。这是我的密码

delayedRollUp = function() {
    if ( !$metaArea.hasClass('active') ) {
        var timeout = setTimeout(function(){
            animateRollUp( $metaTab );
        }, 5000 );
        $metaArea.data('timeout', timeout);
    }
};

// Make the meta boxes dissapear on mouse leave
$metaArea.mouseenter( function(){
    clearTimeout($(this).data('timeout'));
}).mouseleave(function(){
    delayedRollUp();
}).focusin( function(){
    $metaArea.addClass('active');
}).focusout(function(){
    $metaArea.removeClass('active');
});
我可以看出问题在于鼠标和键盘事件都没有考虑到彼此。我需要一个条件检查,比如
hasMouseFocus
hasKeyboardFocus
,这样我就可以防止调用
setTimeout()
,但是我找不到任何像文档中那样的方法

更新代码以将活动类添加到
$metaArea
。这在一定程度上是有效的,因为如果单击元素,它不会隐藏,但是元素之间的选项卡会导致超时被重置


如何解决此问题?

您可以使用
:focus
选择器检查输入元素是否具有焦点

//返回当前集中在#容器中的元素数
(0或1)
$(“#容器输入:焦点”)。长度

参考文献


您应该提供一个JSFIDLEimo@A.Wolff我很想这样做,但由于某些原因,我无法让jQuery在我的小提琴中工作。目前我必须编写js文件,保存并重新加载到浏览器中。您提供的链接是用于
.focus()
事件的,而不是
:focus
选择器。不幸的是谷歌去掉了前面的冒号,我找到了。问题是它不起作用,或者我用错了。通过向可单击选项卡添加一个类,解决了一半的问题。现在,我正试图找出一个隐藏的元素。