Javascript 是否添加到window.onload事件?
我想知道在window.onload事件完成后如何向其添加另一个方法调用 已分配方法调用 假设脚本中的某个地方我有这个任务Javascript 是否添加到window.onload事件?,javascript,jquery,Javascript,Jquery,我想知道在window.onload事件完成后如何向其添加另一个方法调用 已分配方法调用 假设脚本中的某个地方我有这个任务 window.onload = function(){ some_methods_1() }; 后来在剧本里我有了这个任务 window.onload = function(){ some_methods_2() }; 目前,只调用某些方法\u 2。是否有任何方法可以添加到上一个窗口。onload回调而不取消某些方法\u 1?(也不包括在同一功能块中的某些方法\u
window.onload = function(){ some_methods_1() };
后来在剧本里我有了这个任务
window.onload = function(){ some_methods_2() };
目前,只调用某些方法\u 2
。是否有任何方法可以添加到上一个窗口。onload
回调而不取消某些方法\u 1
?(也不包括在同一功能块中的某些方法\u 1()
和某些方法\u 2()
)
我想这个问题不是关于window.onload的,而是关于javascript的。我不想将某些内容分配给window.onload
,如果其他开发人员处理脚本并添加一段同样使用window.onload的代码(不查看我以前的代码),他会禁用我的onload事件
我也在想同样的事情
$(document).ready()
在jquery中。
如何在不破坏之前或之后的内容的情况下向其添加内容?您可以使用attachEvent(ie8)和addEventListener
addEvent(window, 'load', function(){ some_methods_1() });
addEvent(window, 'load', function(){ some_methods_2() });
function addEvent(element, eventName, fn) {
if (element.addEventListener)
element.addEventListener(eventName, fn, false);
else if (element.attachEvent)
element.attachEvent('on' + eventName, fn);
}
基本上有两种方法
存储窗口的上一个值。onload
以便代码可以调用上一个处理程序(如果在代码执行之前或之后出现)
使用addEventListener
方法(这当然是Microsoft不喜欢的,并且要求您使用另一个不同的名称)
如果另一个脚本想要使用window.onload
,并且不考虑协作,那么第二种方法将给您带来更大的安全性,但是Javascript的主要假设是所有脚本都会像您尝试的那样协作
请注意,一个不适合与其他未知脚本一起使用的坏脚本总是能够破坏页面,例如,弄乱原型、污染全局名称空间或破坏dom。如果使用jQuery,则不必做任何特殊操作。通过$(document).ready()添加的处理程序不会相互覆盖,而是依次执行:
$(document).ready(func1)
...
$(document).ready(func2)
如果您不使用jQuery,您可以使用,正如Karaxuna所演示的那样,对于IE来说,这可能不是一个流行的选项,但有时脚本最终会分布在不同的块中,在这种情况下,我发现这是一个快速修复方法
if(window.onload != null){var f1 = window.onload;}
window.onload=function(){
//do something
if(f1!=null){f1();}
}
然后在别的地方
if(window.onload != null){var f2 = window.onload;}
window.onload=function(){
//do something else
if(f2!=null){f2();}
}
这将根据需要更新onload函数和链$(document).ready()
累加。如果jQuery在手,就使用它。所以为了使它跨浏览器兼容,我应该同时使用这两种语言?另外,如果稍后在脚本中,我在先前使用addEventListener之后将回调附加到window.onload,那么我分配给addEventListener的任何内容是否都会被取消?这太棒了!那么jquery的$(document).ready()或bind()呢?你知道jquery只是Javascript吗?我没有检查,但我猜测它可能使用(2)(如果可用)或(1)用于较旧的浏览器。当然,我只是问,因为$(document).ready()与window.onload()有点不同……”ready事件发生在HTML文档加载之后,而onload事件发生在所有内容(例如图像)加载之后你是说“document.attachEvent('onload'…)”,而不是“load”。)您不应该使用document.addEventListener(“加载”)(在我的firefox版本中不起作用),而应该使用window.addEventListener(“加载”)。请参阅@JeremySalwen找到了更好的来源:。更正。
window.onload=(function(oldLoad){
return function(){
oldLoad && oldLoad();
func1();
}
})(window.onload)
...
window.onload=(function(oldLoad){
return function(){
oldLoad && oldLoad();
func2();
}
})(window.onload)
if(window.onload != null){var f1 = window.onload;}
window.onload=function(){
//do something
if(f1!=null){f1();}
}
if(window.onload != null){var f2 = window.onload;}
window.onload=function(){
//do something else
if(f2!=null){f2();}
}