2009-10-01 54 views
1

有沒有什麼辦法來暫停JavaScript的執行,直到整個頁面加載到瀏覽器中?我在使用AJAX的文檔的底部更新一個div但是當我點擊此鏈接前,整個頁面加載我得到一個錯誤......如何暫停javascript的執行?

<%= link_to_remote 'Update', :update => 'div_at_the_bottom', :url => { :usual_stuff } %> 

回答

2

禁用生成鏈接並允許它在DOM加載:

  1. 禁用鏈接:

    <%= link_to_remote 'Update', 
         { :update => 'div_at_the_bottom', :url => { :usual_stuff } }, 
         { :disabled => 'disabled', :id => 'update-trigger' } 
    %> 
    

    (注意,要能夠通過這個額外的選項,你需要link_to_remote使[2nd] "options"哈希顯示爲通過將其包含在內而顯示爲{}Extra help on this

  2. 然後某處(原型JS LIB已被列入後的任意位置),使得當DOM加載鏈接(這是類似於大家一直說到目前爲止做):

    <script> 
    $(document).observe('dom:loaded', function() { 
        $('update-trigger').disabled = false 
    }) 
    </script> 
    

該解決方案也是語義上的愉快,如果這對你很重要(它對我有用)。

+0

這正是我想要的。 順便說一句'disabled'標籤不適用於,但我明白了。 謝謝 – Kylo 2009-10-01 16:21:50

+0

@Kylo:通過golly你是對的。 http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.12.1我已經在爲IE和Firefox構建的應用程序中成功地在錨上使用了此屬性。該死的。 – 2009-10-01 17:45:37

1

如果你去一個JavaScript庫,例如jQuery你可以很容易地將任何JavaScript代碼綁定到DOM ready事件並避免這種問題。

+0

OP不是「綁定任何javascipt代碼」。 OP正在使用您的答案無法解決的'link_to_remote'。完全一樣。 – 2009-10-01 14:37:57

3

最簡單的方法就是做window.onload一切:

window.onload = function() { 
    // do everything here 
} 

您也可以把您的JavaScript就在頁的末尾,</body>前。這樣,你操作的任何對象都被保證在DOM中。

正如其他人所說,有些JS框架有運行JS的DOM負載的一個很好的方法。這樣做的主要優點是你不會得到類似於「無格式內容的閃光」的JS,即看到一個元素(可能是醜陋的),然後在完整的頁面加載後改變。

+0

只有在整個文件已加載,包括所有的圖像,並沒有什麼,這是一種在大多數情況下 – 2009-10-01 14:02:57

+0

真矯枉過正,但OP被修改的對象是在頁面的底部,這樣的影響是,事件觸發最小我假設。 – DisgruntledGoat 2009-10-01 14:27:20

+0

這是谷歌的「最佳實踐」爲Web開發,甚至部分在http://code.google.com/speed/articles/optimizing-opensocial-gadgets.html - 「將JavaScript頁面儘可能晚的小工具。並從上到下加載和渲染網頁,讓用戶可見的內容如HTML,圖像和CSS在下載順序中具有更高的優先級。「 – 2009-10-01 14:32:03