jQuery 1.4.2:.is(“:focus”)给出了语法错误

假设有一个单一输入的文档。 我想要做的就是这么简单:

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

我希望上面的代码返回true 。 相反,firebug记录错误:

 Syntax error, unrecognized expression: Syntax error, unrecognized expression: focus 

我在这里想念的是什么? 我假设is()使用的语法与$()相同,或者我不能这样做?

如果这是不可修复的,你会如何建议检查焦点输入?

编辑:

从jquery 1.6开始, :focus选择器是jquery核心的一部分: http : //api.jquery.com/focus-selector/
如果您需要它,只需升级。

$("input").focus()应该足够了。 As :focus不是选择器。

  $("input").focus(function () { //do something }); 

编辑:

$("input:focus").runFunc(); 我想这可行。 Cletus很好地总结了这个问题,我认为值得一看。

您可以使用document.activeElement测试它是否是活动(聚焦)元素,如下所示:

 if($("input")[0] == document.activeElement) { //first input is focused } 

你可以在这里尝试一下 。 请注意,虽然大多数时候你的动作是在另一个元素上触发的,所以如果你单击一个按钮然后会有焦点而现在是活动元素,所以你不能通过按钮检查来检查它,因为元素已经在大多数情况下,在您的活动开始时更改。

将其添加到您的代码中它将起作用:

 jQuery.expr[':'].focus = function( elem ) { return elem === document.activeElement && ( elem.type || elem.href ); }; 

你可以使用jQuery .data()函数来做类似的事情。

 $('input').focus(function () { $(this).data('focus', true); // set focus to true (on focus) }); $('input').blur(function () { $(this).data('focus', false); // set focus to false (on blur) }); 

然后检查焦点使用$('#element-id').data('focus') 。 如果将此值设置为true,则该元素具有焦点。

做这样的事情:

$('input').focus(function(){$(this).addClass('focus')});

然后你可以检查一个元素是否具有这样的焦点:

$('input').hasClass('focus'); // this will return true or false

如果你想检查输入是否有焦点你可以使用:

 $('input:focus') //returns the focused element, assuming it's an input element... $('[selector]:focus').length == 0 //check if a selected element has focus...