當我嘗試在頁面加載時將焦點設置爲輸入元素時,在某些情況下,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!」。
任何更好的想法感激地收到:)