使用window.onload超过1次

时间:2012-08-31 10:09:10

标签: javascript jquery

如果我写这个

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


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

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

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


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

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

6 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:3)

喜欢

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

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

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:1)

Robert Hahn对他的blog有一个很好的解决方案。

function makeDoubleDelegate(function1, function2) {
    return function() {
        if (function1)
            function1();
        if (function2)
            function2();
    }
}

window.onload = makeDoubleDelegate(window.onload, myNewFunction );
  

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

     

第一次调用window.onload时,window.onload本身就是   undefined,所以返回的是一个只有匿名函数   myNewFunction()里面。在随后的window.onload分配中,   window.onload确实存在,所以无论它持有什么都将被包裹起来   新功能。这个名单也在增长。

答案 4 :(得分:0)

尝试这样的事情

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

答案 5 :(得分:0)

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

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