有沒有什麼辦法來暫停JavaScript的執行,直到整個頁面加載到瀏覽器中?我在使用AJAX的文檔的底部更新一個div但是當我點擊此鏈接前,整個頁面加載我得到一個錯誤......如何暫停javascript的執行?
<%= link_to_remote 'Update', :update => 'div_at_the_bottom', :url => { :usual_stuff } %>
有沒有什麼辦法來暫停JavaScript的執行,直到整個頁面加載到瀏覽器中?我在使用AJAX的文檔的底部更新一個div但是當我點擊此鏈接前,整個頁面加載我得到一個錯誤......如何暫停javascript的執行?
<%= link_to_remote 'Update', :update => 'div_at_the_bottom', :url => { :usual_stuff } %>
禁用生成鏈接並允許它在DOM加載:
禁用鏈接:
<%= 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)
然後某處(原型JS LIB已被列入後的任意位置),使得當DOM加載鏈接(這是類似於大家一直說到目前爲止做):
<script>
$(document).observe('dom:loaded', function() {
$('update-trigger').disabled = false
})
</script>
該解決方案也是語義上的愉快,如果這對你很重要(它對我有用)。
如果你去一個JavaScript庫,例如jQuery你可以很容易地將任何JavaScript代碼綁定到DOM ready事件並避免這種問題。
OP不是「綁定任何javascipt代碼」。 OP正在使用您的答案無法解決的'link_to_remote'。完全一樣。 – 2009-10-01 14:37:57
最簡單的方法就是做window.onload
一切:
window.onload = function() {
// do everything here
}
您也可以把您的JavaScript就在頁的末尾,</body>
前。這樣,你操作的任何對象都被保證在DOM中。
正如其他人所說,有些JS框架有運行JS的DOM負載的一個很好的方法。這樣做的主要優點是你不會得到類似於「無格式內容的閃光」的JS,即看到一個元素(可能是醜陋的),然後在完整的頁面加載後改變。
只有在整個文件已加載,包括所有的圖像,並沒有什麼,這是一種在大多數情況下 – 2009-10-01 14:02:57
真矯枉過正,但OP被修改的對象是在頁面的底部,這樣的影響是,事件觸發最小我假設。 – DisgruntledGoat 2009-10-01 14:27:20
這是谷歌的「最佳實踐」爲Web開發,甚至部分在http://code.google.com/speed/articles/optimizing-opensocial-gadgets.html - 「將JavaScript頁面儘可能晚的小工具。並從上到下加載和渲染網頁,讓用戶可見的內容如HTML,圖像和CSS在下載順序中具有更高的優先級。「 – 2009-10-01 14:32:03
這正是我想要的。 順便說一句'disabled'標籤不適用於,但我明白了。 謝謝 – Kylo 2009-10-01 16:21:50
@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