在我的ASP.NET用户控件中,我向window.onload
事件添加了一些JavaScript:
if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName,
"window.onload = function() {myFunction();};", true);
我的问题是,如果在onload
事件中已经有一些东西,那么这将覆盖它。如何允许两个用户控件分别在onload
事件中执行JavaScript?
编辑:感谢您提供有关第三方库的信息。我会牢记在心的。
发布于 2009-03-27 01:34:32
建议的大多数“解决方案”都是特定于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);
}
发布于 2008-08-13 13:44:52
仍然有一个丑陋的解决方案(远不如使用框架或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事件触发之前很久就被调用。
发布于 2010-12-01 10:48:09
我今天遇到了类似的问题,所以我用下面的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上,被迫使用我的大脑一段时间!
https://stackoverflow.com/questions/9434
复制相似问题