开发者

jQuery 1.4.2: .is(":focus") gives syntax error

Assume there is a document with a single input. What I'm trying to do is as simple as this:

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

I would expect the above code to return true. Instead, firebug logs an error:

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

What am I missing here? I assumed that the syntax used with is() is identical to $(), or I can't do that?

How would you recommend to check for a focused input if this is unfixable instead?

EDIT:

As of jquery 1.6, the :focus selector is part of jquery core: http:/开发者_Go百科/api.jquery.com/focus-selector/

If you need it, just upgrade.


You can test if it's the active (focused) element bu using document.activeElement like this:

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

You can give it a try here. Note though that most of the time your actions are triggered on another element, so if say you clicked a button then it would have focus and now be the active element, so you couldn't check this with a button check, because the element's already changed by the time your event fired, in most cases.


$("input").focus() should suffice. As :focus is not a selector.

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

Edit:

$("input:focus").runFunc(); I suppose that might work. Cletus has summed up this problem well I think, its worth a look.


Add this to your code and it will work:

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


You can use jQuery .data() function to do something like that.

$('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)
});

Then to check for the focus use $('#element-id').data('focus'). If this is set to true, the element has the focus.


do something like this instead:

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

you can then check if an element has focus like this:

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


if you want to check wether an input has focus or not you can use:

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

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜