2

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

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

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

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

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

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

编辑:

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

4

6 回答 6

5

您可以使用以下方法测试它是否是活动(聚焦)元素 bu document.activeElement

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

你可以在这里试一试。请注意,尽管大多数时候您的操作是在另一个元素上触发的,所以如果说您单击了一个按钮,那么它将具有焦点并且现在是活动元素,因此您无法通过按钮检查来检查这一点,因为该元素已经在大多数情况下,在您的事件触发时更改。

于 2010-09-03T12:20:26.113 回答
4

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

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

编辑:

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

于 2010-09-03T12:06:36.037 回答
2

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

jQuery.expr[':'].focus = function( elem ) {
  return elem === document.activeElement && ( elem.type || elem.href );
};
于 2011-08-04T10:56:40.983 回答
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,则元素具有焦点。

于 2010-09-03T12:18:41.970 回答
0

改为这样做:

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

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

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

于 2010-09-03T12:08:41.190 回答
0

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

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

$('[selector]:focus').length == 0 //check if a selected element has focus...
于 2010-09-03T12:18:48.740 回答