如何延迟调用JavaScript函数?

32

我是 JavaScript 的新手。

我想在 aspx 页面加载完成后调用 JavaScript / jQuery 函数。

我尝试使用 <form onload="function()">window.load = function(){},但 JavaScript 仍然在某些内容完全加载之前触发。

是否可以在 aspx 页面的 Page_PreRender 中调用它,而不是在代码后台中调用,这样我就可以延迟 JavaScript 函数?

我尝试使用 setTimeout("function()",5000) 来解决这个问题。

但是,setTimeout() 在一些浏览器中似乎不兼容,例如:在谷歌浏览器中引起循环。


$(function(){}) 对你无效吗? - ExtraGravy
5个回答

76

setTimeout自1996年以来与所有浏览器兼容。您应该避免评估"functionName()",而是这样做:

setTimeout(functionName,5000)

更新: 如果你最初期望将一个变量传递给函数,但是在超时时没有传递任何变量,那么你需要做的是:

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

但是您目前调用 onload 的方式不正确,因此您需要进行以下更改:

window.addEventListener("load",function() {
  // your stuff
}
或者更简单些。
window.onload=function() {
  // your stuff
}

或者,如果您正在使用jQuery,可以这样做:

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

或者只需这样:

$(function() {
    // your stuff
});

5

如果您想100%确定页面实际加载完成,可以使用以下代码:

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

另一种解决方案是使用onload,但它仅在DOM准备就绪时加载,而不是在窗口实际完成加载时加载。

3
如果你要使用jQuery,最好使用以下方法之一将事件附加到文档的就绪事件:
$(document).ready(callback);

或者

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

或者

$(callback);

或者

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

1
$(document).ready(function(){ 

   //Code goes here

});

或者旧风格

<body onload="myFunction()">

3
我们不再使用旧风格 - 请勿使用。 - mplungjan
好的,好的,我曾经在其他方法都无效时使用过它(IE6 + 大量脚本,很久以前)。但我也不喜欢它。 - MadBender
老式的!杀掉它!用球棒烧掉它!用火砸碎它!XP - ahnbizcad

0
最好使用像jQuery这样的框架。
在jQuery中,您可以定义一个如下的函数:
$(document).ready(function() {

});

这样做将在DOM完全加载时调用它。

可以在此处找到ready()函数的完整文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接