我怎样才能在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);
我相信应该工作。
你可以用jQuery来做到这一点
$(window).load(function () { // jQuery functions to initialize after the page has loaded. });