2011-04-06 65 views
27

我是JavaScript新手。如何推遲javascript函數的調用?

我想在頁面加載到aspx頁面後調用JavaScript/jQuery函數。

我嘗試使用<form onload="function()">window.load = function(){},但JavaScript仍然在一些內容完全加載之前觸發。

是否有可能在Page_PreRender期間在aspx頁面中調用,而不是在代碼後面,以便我可以延遲JavaScript函數?

我試過setTimeout("function()",5000)來解決問題。

setTimeout()似乎與某些瀏覽器不兼容,例如:導致在Google Chrome中循環。

+0

'$(function(){})'不適合你嗎? – ExtraGravy 2011-04-06 16:54:57

回答

65

setTimeout是自1996年以來,您應該避免的評價所有的瀏覽器「使用functionName()」,而是兼容做到:

setTimeout(functionName,5000) 

UPDATE:如果您最初期望傳遞給函數的變量和當超時,你需要沒有做到這一點,而不是:

setTimeout(function() { functionName() },5000) 

因爲setTimeout的會超時ID傳遞給函數,如果它被稱爲像在第一個例子。

但是您不正確調用onload,所以你需要做的無論是這樣的:

window.onload=function() { 
    // your stuff 
} 

或者,因爲你正在使用jQuery,這樣的:

$(document).ready(function() { 
    // your stuff 
}); 

或者只是這樣的:

$(function() { 
    // your stuff 
}); 
1
$(document).ready(function(){ 

    //Code goes here 

}); 

或老式

<body onload="myFunction()"> 
+3

我們不再做舊風格 - 請。 – mplungjan 2011-04-06 16:54:28

+1

我同意,沒有更多的內聯JS ... – 2011-04-06 16:57:03

+0

好吧,好吧,我曾經使用它,當沒有其他工作(IE6 +很多腳本,很久以前)。我也不喜歡它。 – MadBender 2011-04-06 17:05:27

0

建議最好使用一個框架像jQuery
在jQuery中,你可以定義一個函數是這樣的:

$(document).ready(function() { 

}); 

這樣,當DOM完全加載它會被調用。

ready()函數的完整文檔可以在here找到。

3

如果你將要使用jQuery那麼它是最好的事件連接使用下列之一的文檔準備事件:

$(document).ready(callback); 

$(document).ready(function() { /* do stuff */ }); 

$(callback); 

$(function() { /* do stuff */ }); 
5

如果你想成爲100%肯定它的網頁時實際上載入,使用:

$(window).load(function(){ 
    //After EVERYTHING loads, including images. 
}) 

其他的解決方案,onload的作品,但它加載一旦DOM準備就緒,但不是當窗口實際上是完成加載。