添加多个window.onload事件
-
08-06-2019 - |
题
在我的 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,这迫使我使用一段时间!
尝试这个:
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);
我相信这应该有效。
你可以用 jquery 来做到这一点
$(window).load(function () {
// jQuery functions to initialize after the page has loaded.
});