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

时间:2010-09-03 12:04:02

标签: jquery

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

$("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/
如果您需要,只需升级即可。

6 个答案:

答案 0 :(得分:5)

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

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

You can give it a try here。请注意,尽管大多数情况下您的操作是在另一个元素上触发的,但是如果您单击一个按钮然后将具有焦点并且现在是活动元素,因此您无法使用按钮检查,因为在大多数情况下,在事件触发时元素已经更改。

答案 1 :(得分:4)

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

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

编辑:

$("input:focus").runFunc();我认为可能有效。我认为Cletus总结了这个问题,值得一看。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

您可以使用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,则元素具有焦点。

答案 4 :(得分:0)

做这样的事情:

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

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

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

答案 5 :(得分:0)

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

$('input:focus') //returns the focused element, assuming it's an input element...

$('[selector]:focus').length == 0 //check if a selected element has focus...