我正在开发一个可以使用键盘控制的应用程序(游戏)。问题是它还包含一些默认的输入元素(如登录表单字段)。为了防止游戏在用户输入凭据时对按键做出反应,我会做一个检查:
if (isDef($("*:focus").attr("id")))
return;
它几乎适用于所有主流浏览器,但IE浏览器。在Internet Explorer中,div也可以专注于它们,几乎在每种情况下,页面上的某些元素都集中在它上面。因此,我想检查一些元素是否具有焦点,但是一些可以接受键盘输入的元素具有焦点。在我的情况下,它仅限于textarea或输入。如何检查这两种类型的元素是否具有焦点?
答案 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
属性本身。
希望有所帮助