jQuery:如何知道input元素是否具有焦点

时间:2012-03-27 07:42:02

标签: javascript jquery jquery-ui focus

我正在开发一个可以使用键盘控制的应用程序(游戏)。问题是它还包含一些默认的输入元素(如登录表单字段)。为了防止游戏在用户输入凭据时对按键做出反应,我会做一个检查:

if (isDef($("*:focus").attr("id")))
    return;

它几乎适用于所有主流浏览器,但IE浏览器。在Internet Explorer中,div也可以专注于它们,几乎在每种情况下,页面上的某些元素都集中在它上面。因此,我想检查一些元素是否具有焦点,但是一些可以接受键盘输入的元素具有焦点。在我的情况下,它仅限于textarea或输入。如何检查这两种类型的元素是否具有焦点?

5 个答案:

答案 0 :(得分:32)

您可以使用jquery的表达式轻松完成此操作。

if($("input,textarea").is(":focus")){
//input and text area has focus
}
else{
//no focus for input and textarea
}    

如果您只想检查文本框焦点而不是每个输入元素,请使用输入['text']

更改输入

答案 1 :(得分:9)

if ( $("*:focus").is("textarea, input") ) return;

答案 2 :(得分:8)

欢迎来到2015年,在这里你不需要jQuery这种东西。 Vanilla JS支持HTMLELement.matches(Query:String)

所以我们可以做点什么,

var el = document.getElementById("El")
if(el.matches(":focus")) // true or false (You can use other CSS selectors too)

答案 3 :(得分:2)

以下是我可以帮助您的示例代码示例。

page.title

答案 4 :(得分:0)

针对您的问题的替代“原始javascript”解决方案可能是使用element.tabIndex属性。

canvas.tabIndex = 0;

这将允许您使用此

canvas.onkeydown = function(){
    ...
}

而不是这个

document.body.onkeydown = function(){
    ...
}

这样,要控制画布,你必须首先关注它 - 就像一个flash游戏。

当画布没有聚焦时,它不会做任何事情。并且您可以在不干扰画布的情况下键入附近的文本字段。

你还可以使用css中的:focus伪选择器给出画布聚焦的视觉指示:

canvas:focus{
    ...
}

我确信jQuery中有tabIndex的等效属性。我也很确定IE支持tabIndex属性本身。


希望有所帮助