2009-11-13 83 views
3

自投放JavaScript的DOM方法在HTML頁面的底部(後<體>)是很多比使用jQuery的「準備」事件快,不應該我們是做迫使:在jQuery中強制觸發?

$('document').trigger('ready'); 

.. 。在身體標記之後?我沒有真的嘗試過,但它應該加快速度。或者我錯過了什麼?

+0

FWIW ASP.NET AJAX客戶端框架通過在關閉''標籤之前注入它的「就緒」代碼('')。 – 2009-11-13 22:30:25

回答

6

jQuery.ready();

1

ready事件意味着文件已經被解析和DOM可以被操縱。瀏覽器完成解析後會發生這種情況,並且您無法儘快完成此操作。

您認爲這樣的事情會起什麼作用?它是否會在瀏覽器的HTML解析器中翻轉一個魔術開關,使其運行速度比平時更快?它會導致計算機的處理器運行得更快,因此瀏覽器會盡快完成解析文檔?

您無法強制瀏覽器以比任何速度快的速度解析文檔。甚至沒有jQuery ;-)

+0

那不是真的,是嗎? http://stackoverflow.com/questions/1438883/jquery-why-use-document-ready-if-external-js-at-bottom-of-page 我們在客戶端的底部使用domReady()函數網站,我們從來沒有遇到任何問題。實際上,它比使用「就緒」狀態要快很多,並且可以毫無問題地操縱DOM,因爲無論如何都是加載的。 – David 2009-11-13 17:01:28

+0

雖然這不是問題。 OP詢問*觸發ready事件,但這是不可能的:你可以觸發與用戶活動相關的事件,例如'click'來模擬用戶點擊一個按鈕,但是你不能觸發事件取決於瀏覽器已達到給定狀態的DOM的內部表示。將問題改寫爲詢問'$('document')。trigger('load');'並且它顯然沒有意義。 – NickFitz 2009-11-16 12:29:07

+0

當然,您可以觸發與任何用戶活動無關的事件。我想你可以通過使用jQuery.ready()來觸發ready事件。或者jQuery(document).triggerHandler(「ready」); – David 2009-11-18 12:35:39

0

我有一個密切相關的問題,我最終在找到SO之前找到了答案。由於有我的問題的人可能會在這裏(谷歌的結果「jquery force document ready」),請允許我提供一些額外的信息。

我的問題是,我動態生成一些HTML(使用XSLT),有時會保存以備後用,但其他時間我只想用新的HTML打開一個新窗口,以便用戶可以預覽它。像這樣:

var html = UseXSLTToGenerateSomeHTML(); 
var myWindow = window.open('', '', 'width=805,height=493'); 
myWindow.document.write(html); 
myWindow.focus(); 

問題是,生成的HTML使用jQuery和從未得到調用domready中的事件。大衛的回答應該很明顯地告訴我如何去做,但是這個調整一下子就逃脫了。它是:

var html = UseXSLTToGenerateSomeHTML(); 
var myWindow = window.open('', '', 'width=805,height=493'); 
myWindow.document.write(html); 
myWindow.focus(); 
mywindow.jQuery.ready(); 

請注意,在這種情況下,執行此操作的頁面甚至不使用jQuery ...只有生成的HTML會執行此操作。無關緊要,您正在其他文檔上生成jQuery事件。