2012-07-05 148 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")); 
    }); 
});