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

if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
  Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName, 
    "window.onload = function() {myFunction();};", true);            

我的问题是,如果已经有东西了 onload 事件,而不是覆盖它。我将如何允许两个用户控件分别在 onload 事件?

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

有帮助吗?

解决方案

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

if (window.addEventListener) // W3C standard
{
  window.addEventListener('load', myFunction, false); // NB **not** 'onload'
} 
else if (window.attachEvent) // Microsoft
{
  window.attachEvent('onload', myFunction);
}

其他提示

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

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 已加载,但尚未加载图像或样式表等外部组件,从而允许您在加载事件触发之前很久就被调用。

我今天遇到了类似的问题,所以我解决了它 index.js 具有以下内容:

window.onloadFuncs = [];

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

在我想要附加 onload 事件的其他 js 文件中,我只需执行以下操作:

window.onloadFuncs.push(function(){
 // code here
});

虽然我通常使用 jQuery,但这次我被限制为纯 js,这迫使我使用一段时间!

穆工具 是另一个很棒的 JavaScript 框架,它相当容易使用,就像 RedWolves 所说的那样 jQuery 你可以继续丢弃任意数量的处理程序。

对于我包含的每个 *.js 文件,我只是将代码包装在一个函数中。

window.addEvent('domready', function(){
    alert('Just put all your code here');
});

而且还有 使用 domready 代替 onload 的优点

尝试这个:

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
    // do something
}

编辑:嘿,我正准备用 Firefox 登录并自己重新格式化!似乎仍然无法使用 IE7 为我格式化代码。

我对 ASP.NET 了解不多,但为什么不为 onload 事件编写一个自定义函数,然后为您调用这两个函数呢?如果您有两个函数,请从您为事件注册的第三个脚本调用它们。

你有没有考虑过使用类似的东西 jQuery 它提供了一个用于清理添加多个事件处理程序的框架?

事实上,根据 这个 MSDN 页面, ,看起来像你 多次调用该函数可以注册多个脚本。您只需要使用不同的键(第二个参数)。

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key1, function1, true);

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key2, function2, true);

我相信这应该有效。

我知道这个问题已经得到解答,但我只想让您了解这个功能:

http://phrogz.net/JS/AttachEvent_js.txt

问候 T

你可以用 jquery 来做到这一点

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top