使用window.onload超过1次

如果我写这个

$(document).ready( function () { alert("bla1"); }); $(document).ready( function () { alert("bla2"); }); 

一切都很好,两个警报发生,但如果代码是

 window.onload = function () { alert("bla1"); } window.onload = function () { alert("bla2"); } 

没有发生第二次警报,请告诉某人,为什么2个或更多window.onload是错误的?

你给它分配了一些东西。 然后,您可以为其分配其他内容并覆盖之前的内容。

 foo = 1; foo = 2; // foo is now "2" it is not "1" and "2" 

如果要非破坏性地分配事件处理程序,请使用addEventListener 。 您需要使用兼容性方法来支持Old-IE。 这些方法通过on方法构建到jQuery中。

就像是

  var test; test = 10; test = 20 alert(test); // 20 

你覆盖它和jQuery处理load事件的方式不同。

如果要实现所需的行为,则必须使用addEventListener函数。

 window.addEventListener("load",function () { alert("bla1"); }, false); window.addEventListener("load",function () { alert("bla2"); }, false); 

Robert Hahn在他的博客上有一个很好的解决方案。

 function makeDoubleDelegate(function1, function2) { return function() { if (function1) function1(); if (function2) function2(); } } window.onload = makeDoubleDelegate(window.onload, myNewFunction ); 

makeDoubleDelegate()函数将放在第一个JS文件中,随时可以调用。 它的作用是接受两个函数作为参数,检查它们是否存在,如果存在,则返回包含有效的现有函数的匿名函数。

第一次调用window.onload时,window.onload本身是未定义的,因此返回的是一个内部只有myNewFunction()的匿名函数。 在随后的window.onload赋值中,window.onload确实存在,所以无论它持有什么都将用新函数包装。 这个名单也在增长。

尝试这样的事情

 function doOnLoad() { alert("hi"); alert("bye"); } window.onload = doOnLoad; 

我知道我的答案为时已晚,但您可以尝试这样的事情:

 function hello() { window.alert("hello"); } function bye() { window.alert("bye"); } window.onload=hello,bye;