JavaScript(或jQuery)中是否存在“焦点”?

有什么我可以做这样的(perhap通过插件)

if ( ! $('form#contact input]').hasFocus()) { $('form#contact input:first]').focus(); } 

基本上,将焦点设置为第一个input,但只有当用户还没有点击任何东西?

我知道这也会起作用,但还有什么更优雅的?

 $(function() { var focused = false; $('form#contact input]').focus(function() { focused = true; }); setTimeout(function() { if ( ! focused) { $('form#contact input:first]').focus(); } }, 500); }); 

没有本地解决scheme,但是有一个更优雅的方式,你可以做到这一点:

 jQuery.extend(jQuery.expr[':'], { focus: "a == document.activeElement" }); 

你正在定义一个新的select器。 请参阅插件/创作 。 那你可以这样做:

 if ($("...").is(":focus")) { ... } 

要么:

 $("input:focus").doStuff(); 

$('input:focus')

这是CSS。 您不需要创build“自定义select器”。 它已经存在! http://www.w3schools.com/CSS/pr_pseudo_focus.asp

只要附加你想要做的任何过程给select器,如果有问题的元素没有被聚焦,它将被删除。 我最近做了这个,以防止在电子邮件input未被使用时实例化电子邮件input错误检查。

如果你所要做的只是检查用户是否专注于任何事情,只要做到这一点:

 if($('input:focus').size() == 0){ /* Perform your function! */ } 

jQuery 1.6现在有一个专用的:focusselect器。

使用jQuery 1.3.2和Firefox 3.6.8时遇到了cletus方法的麻烦,因为string"a == document.activeElement"不是一个有效的函数。

我修正了它定义focus键的function。 实际上, jQuery.expr[':']中定义的所有其他键都被定义为函数。 代码如下:

 jQuery.extend(jQuery.expr[':'], { focus: function(e){ return e == document.activeElement; } }); 

所以,现在它按预期工作。

不过,我在Firefox 3.6.8中遇到了一些奇怪的行为(也许是FF中的一个bug?)。 如果我在页面渲染的时候点击了input文本,并且如果我在页面加载时调用了is(":focus") ,我会从FireBug报告的浏览器中得到一个错误,脚本会中断。

为了解决这个问题,我用try...catch块包围了代码,错误返回false 。 如果要防止用户遇到同样的错误,请使用它:

 jQuery.extend(jQuery.expr[':'], { focus: function(e){ try{ return e == document.activeElement; } catch(err){ return false; } } }); 

不,没有。

但是,你可以像这样模拟它:

 $(':input') .data('focused', false) .focus(function() { $.data(this, 'focused', true); }) .blur(function() { $.data(this, 'focused', false); }); 

有一个插件http://plugins.jquery.com/project/focused

你也可以检查使用jQuery来testinginput是否有焦点

令人沮丧的是,考虑到解决scheme,很难find解决这个问题的办法其实很简单:

 if (document.activeElement == this) { // has focus } if (document.activeElement != this) { // does not have focus } 

我知道这是一个老问题,但可能是我的解决scheme将帮助别人:)

因为这没有为我工作:

 if ($(this)!=$(document.activeElement)) { ... } 

..“this”从模糊function返回。 所以我这样做了:

 if ($(document.activeElement).attr("class") != "input_textbox"){ ... } 

这是一个简洁的方法来做到这一点。

 $(document.activeElement) 

或将其插入您的示例中

 if ($('form#contact input]')!=$(document.activeElement)) { ... } 
  $('*:focus') 

(Necro ftw,但仍然有效和有用)