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/
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...
精彩评论