JavaScript(或jQuery)中是否存在“焦点”?
有什么我可以做这样的(perhap通过插件)
if ( ! $('form#contact input]').hasFocus()) { $('form#contact input:first]').focus(); }
基本上,将焦点设置为第一个input,但只有当用户还没有点击任何东西?
我知道这也会起作用,但还有什么更优雅的?
$(function() { var focused = false; $('form#contact input]').focus(function() { focused = true; }); setTimeout(function() { if ( ! focused) { $('form#contact input:first]').focus(); } }, 500); });
没有本地解决scheme,但是有一个更优雅的方式,你可以做到这一点:
jQuery.extend(jQuery.expr[':'], { focus: "a == document.activeElement" });
你正在定义一个新的select器。 请参阅插件/创作 。 那你可以这样做:
if ($("...").is(":focus")) { ... }
要么:
$("input:focus").doStuff();
$('input:focus')
这是CSS。 您不需要创build“自定义select器”。 它已经存在! http://www.w3schools.com/CSS/pr_pseudo_focus.asp
只要附加你想要做的任何过程给select器,如果有问题的元素没有被聚焦,它将被删除。 我最近做了这个,以防止在电子邮件input未被使用时实例化电子邮件input错误检查。
如果你所要做的只是检查用户是否专注于任何事情,只要做到这一点:
if($('input:focus').size() == 0){ /* Perform your function! */ }
jQuery 1.6现在有一个专用的:focus
select器。
使用jQuery 1.3.2和Firefox 3.6.8时遇到了cletus方法的麻烦,因为string"a == document.activeElement"
不是一个有效的函数。
我修正了它定义focus
键的function。 实际上, jQuery.expr[':']
中定义的所有其他键都被定义为函数。 代码如下:
jQuery.extend(jQuery.expr[':'], { focus: function(e){ return e == document.activeElement; } });
所以,现在它按预期工作。
不过,我在Firefox 3.6.8中遇到了一些奇怪的行为(也许是FF中的一个bug?)。 如果我在页面渲染的时候点击了input文本,并且如果我在页面加载时调用了is(":focus")
,我会从FireBug报告的浏览器中得到一个错误,脚本会中断。
为了解决这个问题,我用try...catch
块包围了代码,错误返回false
。 如果要防止用户遇到同样的错误,请使用它:
jQuery.extend(jQuery.expr[':'], { focus: function(e){ try{ return e == document.activeElement; } catch(err){ return false; } } });
不,没有。
但是,你可以像这样模拟它:
$(':input') .data('focused', false) .focus(function() { $.data(this, 'focused', true); }) .blur(function() { $.data(this, 'focused', false); });
有一个插件http://plugins.jquery.com/project/focused
你也可以检查使用jQuery来testinginput是否有焦点
令人沮丧的是,考虑到解决scheme,很难find解决这个问题的办法其实很简单:
if (document.activeElement == this) { // has focus } if (document.activeElement != this) { // does not have focus }
我知道这是一个老问题,但可能是我的解决scheme将帮助别人:)
因为这没有为我工作:
if ($(this)!=$(document.activeElement)) { ... }
..“this”从模糊function返回。 所以我这样做了:
if ($(document.activeElement).attr("class") != "input_textbox"){ ... }
这是一个简洁的方法来做到这一点。
$(document.activeElement)
或将其插入您的示例中
if ($('form#contact input]')!=$(document.activeElement)) { ... }
$('*:focus')
(Necro ftw,但仍然有效和有用)