2012-10-03 46 views
2

當我嘗試在頁面加載時將焦點設置爲輸入元素時,在某些情況下,Firefox會失敗。這裏是代碼:焦點在地址欄中開始時Firefox焦點轉換失敗

:focus { 
    outline: 3px solid #ff0000; 
} 

<script type="text/javascript"> 
    function setFocus() { 
     document.getElementById('input-id').focus(); 
     document.getElementById('input-id').select(); 
     console.log(document.activeElement); 
    } 
</script> 

<body onload="setFocus()"> 
    <div><input id="input-id" type="text" value="Waiting for focus..." onfocus="console.log('Received focus!')" /></div> 
</body> 

在這裏嘗試:http://jsfiddle.net/johnericsutton/p6VhQ/。這個想法很簡單,當頁面加載時,輸入元素獲得焦點(並且文本被選中)。

它在Firefox在這種情況下:

  • 將光標放在地址欄,然後按Enter鍵;
  • 將光標放在輸入文本中並按Enter鍵,或按下Reload按鈕,或者按下Ctrl-R(在Windows和Linux上,Mac上的Cmd-R)。

但是,如果你把光標在地址欄,然後按刷新按鈕,或(在Windows和Linux,Cmd的-R在Mac)按Ctrl-R它不會在Firefox不工作。您可以從DOM中認爲,在activeElement 的輸入的console.log看到,但事實卻並非如此在2個義項:

  • CSS的輸入選擇沒有被激活;
  • 輸入元素尚未收到焦點事件。

所以DOM現在處於混亂狀態(這是導致我的應用程序的嚴重問題!)只是因爲在地址欄,用戶點擊並按下刷新,而不是在地址欄不點擊,然後按刷新或點擊URL欄並按下Enter鍵。真是一團糟!

通過Firefox的,我的意思是:

  • FF15在Linux和Mac;
  • FF10在Windows和Linux上;
  • FF9在Windows上。

它適用於我試過的每個版本的Chrome和Safari。

我唯一的「解決方案」是在.focus()之前引入alert()。不是很滿意!我應該提醒什麼? 「Firefox錯誤解決方法,請按OK!」。

任何更好的想法感激地收到:)

回答

-1

使用window.focus()的Initalizing;似乎將焦點從地址欄中移出。