我怎样才能在Javascript中添加一个额外的window.onload事件

在我的asp.net用户控制我添加一些脚本到window.onload事件像这样:

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

我的问题是,如果在onload事件中已经有东西,则会覆盖它。 我将如何去允许两个用户控件每个在onload事件中执行javascript?

**编辑:**感谢第三方库的信息。 我会记住他们的。

build议的大部分“解决scheme”都是针对微软的,或者需要臃肿的库。 这是一个好方法。 这适用于符合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); } 

仍然有一个丑陋的解决scheme(远不如使用框架或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事件触发之前调用很长时间。

Mootools是另一个非常好用的JavaScript框架,它很容易使用,就像RedWolves用jQuery所说的那样,你可以随心所欲地保持夹持多个处理器。

对于每个* .js文件,我都包含了一个函数中的代码。

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

而且使用domready而不是onload也是有好处的

我今天有一个类似的问题,所以我解决了它有一个index.js与以下内容:

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

和额外的js文件,我想附加onload事件,我只需要这样做:

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

虽然我通常使用jQuery,但是这次我被限制在纯粹的js中,只能用我的头脑一段时间!

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

尝试这个:

 window.attachEvent("onload", myOtherFunctionToCall); function myOtherFunctionToCall() { // do something } 

编辑:嘿,我刚准备好用Firefoxlogin,并自己重新格式化! 依然似乎没有为IE7格式化代码。

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

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

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

我相信应该工作。

我知道这已经回答了,但我只是想让你知道这个function:

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

问T

你可以用jQuery来做到这一点

 $(window).load(function () { // jQuery functions to initialize after the page has loaded. });