2010-02-11 32 views
3

我想製作一個表格,我想自動將焦點放在字段上。在過去,我學會了一直等待DOM操作,直到window.onload被觸發,因爲DOM可能沒有準備好。由於JQuery的DOMContentReady事件已經成名,在firefox(在兼容的瀏覽器中)比window.onload早一些。可以在HTML中的元素聲明之後使用element.focus()有害嗎?

從字段顯示到獲取焦點的時刻(通過在window.onload中或在DOMContentReady被觸發後使用document.getElementById(「inputfield」)。focus()),仍然存在延遲。爲了最大限度地減少延遲,有些人建議使用焦點()在你的頁面中的元素之後直接,如:

<form name="f"> 
    <input id="q" autofocus> 
    <script> 
    if (!("autofocus" in document.createElement("input"))) { 
     document.getElementById("q").focus(); 
    } 
    </script> 
    <input type="submit" value="Go"> 
</form> 

(從Dive Into HTML5例)

此外,谷歌關閉小組建議這種做法:「the preferred way is to use inline scripts as soon as possible 「,如another answer on SO的狀態。

我不想辯論這是否是不好的做法(一般來說,我同意內容和行爲應該分開,最好在不同的文件中)。我的問題是:這可能有害嗎?例如,在某些瀏覽器中導致錯誤消息,因爲該字段可能仍未正確呈現(並且不要忘記移動瀏覽器)。任何建議表示讚賞。

回答

3

不,它不是有害的,它是(主觀)最好的方法。

原因,它是最好的:

  • 代碼儘快成功可能執行(而不是等待整個DOM,它等待,直到它達到一定的元素)
  • 不依賴於DOM事件(哪還有尚待規範)

原因它吮吸:

  • 的缺乏行爲分離
  • 難以維持,因爲代碼將散落各地的地方
  • 提高整體頁面大小由幾個<script>標籤存在性
3

說實話,我還以爲,如果你是看到頁面彈出和元素獲得焦點之間的延遲,那麼這確實表明您的頁面可能太大,因此減少這將是您的第一停靠位置。我知道如果我看到這樣的內聯代碼,我會非常不高興。正如喬什所說,這將是一個可維護性的噩夢。

但是,在它是有害的問題上,我一直認爲,如果瀏覽器已經處理腳本節點來運行javascript,那麼它也將處理輸入節點,所以它應該可用於碼。所以我不會指望有錯誤。

+0

我同意你的看法,但我注意到緩慢/片狀的連接,即使是短小的頁面也會給你帶來麻煩。例如。在我的圖書館,當我連接到Gmail時,頁面呈現得非常緩慢,我不知道爲什麼。這會在查看輸入字段和自動對焦之間造成延遲。 – 2010-02-13 15:59:55

相關問題