Javascript中是否有方法确定是否没有元素处于焦点?

Javascript中是否有方法确定是否没有元素处于焦点?,javascript,Javascript,我正在将一些热键构建到我的HTML页面中: $(document).bind('keypress', function (e) { var event = (e.keyCode ? e.keyCode : e.which); if (event == LETTER_P) { // go to another page } } 但问题是,如果他们在页面上输入文本(在文本框元素中,等等)并点击字母“p”,他们就

我正在将一些热键构建到我的HTML页面中:

   $(document).bind('keypress', function (e) {
        var event = (e.keyCode ? e.keyCode : e.which);

        if (event == LETTER_P) {
            // go to another page
        }
    }

但问题是,如果他们在页面上输入文本(在文本框元素中,等等)并点击字母“p”,他们就会转到另一个页面。我只希望重定向在它们不在任何元素中时发生。

您可以在jQuery中使用
:focus
选择器

if ( $( "input:focus, textarea:focus" ).length ) {
   // there is a focused element
}

document.activeElement
现在受到所有主流浏览器的支持。如果焦点中没有元素,则
activeElement
将返回文档正文,因此:

if (document.activeElement === document.body) {
    // Nothing is in focus
}

您可以尝试以下方法:

$(document).bind('keypress', function (e) {
    var event = (e.keyCode ? e.keyCode : e.which);

    if (event == LETTER_P && document.activeElement.tagName == "input") {
        // go to another page
    }
}

我添加到您的代码中不需要任何库。

哦,是的,我可以用任何方式添加。这个调用有多“重”?这是解析整个DOM还是有一种更快的方法?它解析整个DOM,但您可以通过将其更改为
$(“输入:焦点,文本区域:焦点”)
使其更快,因此它只检查输入和文本区域。我喜欢此检查,我可以将所有键检查包装在其中以确保。谢谢
if ( $('input:focus, select:focus').length){
   // there is a focused element which would respond to a keypress
}