在我的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?
修改:感谢您提供有关第三方库的信息。我会记住它们。
答案 0 :(得分:97)
建议的大多数“解决方案”都是特定于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);
}
答案 1 :(得分:17)
还有一个丑陋的解决方案(远不如使用框架或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已经加载但没有加载外部组件,如图像或样式表,允许你在加载事件触发之前很久就被调用。
答案 2 :(得分:4)
我今天遇到了类似的问题所以我解决了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,被迫使用我的思想一段时间!
答案 3 :(得分:3)
Mootools是另一个非常好用的JavaScript框架,就像RedWolves用jQuery说的那样,你可以随心所欲地处理多个处理程序。
对于我包含的每个* .js文件,我只需将代码包装在一个函数中。
window.addEvent('domready', function(){
alert('Just put all your code here');
});
答案 4 :(得分:2)
试试这个:
window.attachEvent("onload", myOtherFunctionToCall);
function myOtherFunctionToCall() {
// do something
}
编辑:嘿,我刚准备好用Firefox登录并自行重新格式化!似乎仍然没有为IE7格式化代码。
答案 5 :(得分:1)
我对ASP.NET知之甚少,但为什么不为onload事件编写自定义函数,而后者又为你调用这两个函数?如果您有两个函数,请从注册该事件的第三个脚本中调用它们。
答案 6 :(得分:1)
您是否考虑使用类似JQuery的内容来提供清除添加多个事件处理程序的框架?
答案 7 :(得分:1)
实际上,根据this MSDN page,看起来可以多次调用此函数来注册多个脚本。您只需要使用不同的键(第二个参数)。
Page.ClientScript.RegisterStartupScript(
this.GetType(), key1, function1, true);
Page.ClientScript.RegisterStartupScript(
this.GetType(), key2, function2, true);
我相信这应该有效。
答案 8 :(得分:1)
答案 9 :(得分:1)
您可以使用jquery
执行此操作$(window).load(function () {
// jQuery functions to initialize after the page has loaded.
});