首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >添加多个window.onload事件

添加多个window.onload事件
EN

Stack Overflow用户
提问于 2008-08-13 03:18:33
回答 8查看 64.1K关注 0票数 66

在我的ASP.NET用户控件中,我向window.onload事件添加了一些JavaScript:

代码语言:javascript
复制
if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
  Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName, 
    "window.onload = function() {myFunction();};", true);            

我的问题是,如果在onload事件中已经有一些东西,那么这将覆盖它。如何允许两个用户控件分别在onload事件中执行JavaScript?

编辑:感谢您提供有关第三方库的信息。我会牢记在心的。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-03-27 01:34:32

建议的大多数“解决方案”都是特定于Microsoft的,或者需要臃肿的库。这里有一个很好的方法。这适用于W3C兼容的浏览器和Microsoft IE。

代码语言:javascript
复制
if (window.addEventListener) // W3C standard
{
  window.addEventListener('load', myFunction, false); // NB **not** 'onload'
} 
else if (window.attachEvent) // Microsoft
{
  window.attachEvent('onload', myFunction);
}
票数 105
EN

Stack Overflow用户

发布于 2008-08-13 13:44:52

仍然有一个丑陋的解决方案(远不如使用框架或addEventListener/attachEvent),那就是保存当前的onload事件:

代码语言:javascript
复制
function addOnLoad(fn)
{ 
   var old = window.onload;
   window.onload = function()
   {
       old();
       fn();
   };
}

addOnLoad(function()
{
   // your code here
});
addOnLoad(function()
{
   // your code here
});
addOnLoad(function()
{
   // your code here
});

请注意,像jQuery这样的框架将提供一种在DOM准备好而不是页面加载时执行代码的方法。

准备好DOM意味着您的HTML已加载,但尚未加载图像或样式表等外部组件,从而允许您在load事件触发之前很久就被调用。

票数 18
EN

Stack Overflow用户

发布于 2010-12-01 10:48:09

我今天遇到了类似的问题,所以我用下面的index.js解决了这个问题:

代码语言:javascript
复制
window.onloadFuncs = [];

window.onload = function()
{
 for(var i in this.onloadFuncs)
 {
  this.onloadFuncs[i]();
 }
}

在我想要附加onload事件的其他js文件中,我只需这样做:

代码语言:javascript
复制
window.onloadFuncs.push(function(){
 // code here
});

虽然我通常使用jQuery,但这一次我被限制在纯js上,被迫使用我的大脑一段时间!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档