提问人:Ray 提问时间:8/13/2008 最后编辑:Rich ChurcherRay 更新时间:11/16/2018 访问量:66263
添加多个 window.onload 事件
Add multiple window.onload events
问:
在我的 ASP.NET 用户控件中,我将向事件添加一些 JavaScript:window.onload
if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName,
"window.onload = function() {myFunction();};", true);
我的问题是,如果事件中已经有一些东西,那么它会覆盖它。我将如何允许两个用户控件在事件中分别执行 JavaScript?onload
onload
编辑:感谢您提供有关第三方库的信息。我会牢记它们。
答:
我对 ASP.NET 了解不多,但为什么不为 onload 事件编写一个自定义函数,该函数反过来为您调用这两个函数呢?如果有两个函数,请从为事件注册的第三个脚本中调用它们。
试试这个:
window.attachEvent("onload", myOtherFunctionToCall);
function myOtherFunctionToCall() {
// do something
}
编辑:嘿,我刚刚准备使用Firefox登录并自己重新格式化!似乎仍然没有用 IE7 为我格式化代码。
实际上,根据此MSDN页面,看起来您可以多次调用此函数来注册多个脚本。您只需要使用不同的键(第二个参数)。
Page.ClientScript.RegisterStartupScript(
this.GetType(), key1, function1, true);
Page.ClientScript.RegisterStartupScript(
this.GetType(), key2, function2, true);
我相信这应该有效。
评论
Mootools 是另一个很棒的 JavaScript 框架,它相当易于使用,就像 RedWolves 所说的那样,使用 jQuery,您可以根据需要继续夹杂任意数量的处理程序。
对于我包含的每个 *.js 文件,我只是将代码包装在一个函数中。
window.addEvent('domready', function(){
alert('Just put all your code here');
});
仍然有一个丑陋的解决方案(远不如使用框架或 /)来保存当前事件: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 已经加载,但外部组件(如图像或样式表)尚未加载,因此可以在 load 事件触发之前很久就调用您。
建议的大多数“解决方案”都是特定于 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);
}
评论
我今天遇到了类似的问题,所以我通过以下方法解决了它: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,被迫使用我的头脑一段时间!
评论
你可以用jquery来做到这一点
$(window).load(function () {
// jQuery functions to initialize after the page has loaded.
});
评论