我可以做这样的事情(通过插件perhap)
if ( ! $('form#contact input]').hasFocus()) {
$('form#contact input:first]').focus();
}
基本上,将焦点设置为第一个输入,但前提是用户尚未点击任何内容?
我知道这也会奏效,但还有更优雅吗?
$(function() {
var focused = false;
$('form#contact input]').focus(function() {
focused = true;
});
setTimeout(function() {
if ( ! focused) {
$('form#contact input:first]').focus();
}
}, 500);
});
答案 0 :(得分:63)
没有本机解决方案,但是有一种更优雅的方式可以做到:
jQuery.extend(jQuery.expr[':'], {
focus: "a == document.activeElement"
});
您正在定义一个新的选择器。见Plugins/Authoring。然后你可以这样做:
if ($("...").is(":focus")) {
...
}
或:
$("input:focus").doStuff();
答案 1 :(得分:26)
$('input:focus')
这是CSS。您无需创建“自定义选择器”。它已经存在! http://www.w3schools.com/CSS/pr_pseudo_focus.asp
只需将您想要执行的任何进程附加到该选择器,如果相关元素没有被聚焦,它就会将其清除掉。我最近这样做是为了让keyup
在没有使用电子邮件输入时实例化电子邮件输入错误检查。
如果您要做的就是检查用户是否专注于任何事情,请执行以下操作:
if($('input:focus').size() == 0){
/* Perform your function! */
}
答案 2 :(得分:11)
jQuery 1.6现在有一个专用的:focus
选择器。
答案 3 :(得分:9)
使用jQuery 1.3.2和Firefox 3.6.8时,我遇到了使用cletus方法的问题,因为字符串"a == document.activeElement"
不是有效函数。
我修复了它定义focus
键的函数。实际上,jQuery.expr[':']
中定义的所有其他键都被定义为函数。这是代码:
jQuery.extend(jQuery.expr[':'], {
focus: function(e){ return e == document.activeElement; }
});
所以,现在它按预期工作。
但是,我在Firefox 3.6.8中遇到了一些奇怪的行为(可能是FF中的一个错误?)。如果我在页面渲染时单击输入文本,并且如果我在页面加载时调用is(":focus")
,我会从浏览器收到错误,由FireBug报告,并且脚本会中断。
为了解决这个问题,我用try...catch
块包围了代码,错误时返回false
。如果您想阻止用户遇到相同的错误,请使用它:
jQuery.extend(jQuery.expr[':'], {
focus: function(e){
try{ return e == document.activeElement; }
catch(err){ return false; }
}
});
答案 4 :(得分:7)
不,没有。
但是,您可以像这样模拟它:
$(':input')
.data('focused', false)
.focus(function() { $.data(this, 'focused', true); })
.blur(function() { $.data(this, 'focused', false); });
答案 5 :(得分:6)
考虑到解决方案实际上很简单,很难找到解决这个问题的方法:
if (document.activeElement == this) {
// has focus
}
if (document.activeElement != this) {
// does not have focus
}

答案 6 :(得分:3)
答案 7 :(得分:2)
这是一种简洁的方法。
$(document.activeElement)
或将其插入您的示例..
if ($('form#contact input]')[0]!=$(document.activeElement)) { ... }
答案 8 :(得分:2)
我知道这是一个老问题,但可能是我的解决方案会帮助某人:)
因为这对我没有用:
if ($(this)!=$(document.activeElement)) { ... }
..从模糊功能返回“this”。所以我这样做了:
if ($(document.activeElement).attr("class") != "input_textbox"){ ... }
答案 9 :(得分:-2)
$('*:focus')
(Necro ftw,但仍然有效且有用)