2012-07-05 119 views
2

我在这里不知所措,以前从未遇到过这个问题。
我无法让焦点()在任何浏览器中都可以工作。我正在使用jquery,甚至无法让它与标准的JavaScript一起工作。我试图增加超时,但仍然没有。我收到的所有警报都是“未定义的”。焦点()将无法正常工作

这里是输入

<input type="text" name="SearchBox" id="SearchBox" class="SearchBox" /> 

,这里是jQuery的

$(document).ready(function(){ 
    setTimeout(function(){ 
     $("#SearchBox").focus(); 
    }, 0); 
    alert($("*:focus").attr("id")); 
}); 

我剥去页下降到只有以上的情况下,一些与它的干扰,但仍然没有成功。它必须是简单的我错过了!

回答

7

直到文档就绪处理程序完成后,搜索框才会获得焦点。

当您拨打setTimeout时,即使超时设置为零,JavaScript将不会处理该超时,直到当前功能完成。这是因为JS是单线程的。

为零的超时调用setTimeout就像是说:“这里的东西我想你做的,一旦此功能已完成。”

因此,在调用alert之后,搜索框才会获得焦点。

An example

+0

谢谢,这解释了未定义的警报。现在,我仍然无法让SearchBox专注。适用于jsfiddle,但不适用于我的网站? – xjx424 2012-07-05 18:39:27

+0

刚刚切换到更新版本的jquery,似乎已经完成了这个诀窍。 – xjx424 2012-07-05 18:40:50

+0

@MikeTaylor你使用的是什么版本的jquery,你切换到哪个版本?我使用1.8并有类似的问题。 – simgineer 2012-07-20 00:00:34

0

试试这个..

$(document).ready(function(){ 
    setTimeout(function(){ 
     $('#SearchBox').focus(); 
    },0); 
    $(":input").focus(function(){ 
     alert($(this).attr("id")); 
    }); 
});