使用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;