2

如果我写这个

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


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

一切都好,出现两个警报,但如果代码是

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


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

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

4

6 回答 6

8

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

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

如果您想以非破坏性方式分配事件处理程序,请使用addEventListener. 您将需要使用兼容性方法来支持 Old-IE。这些方法通过onmethod内置到 jQuery 中。

于 2012-08-31T10:09:50.087 回答
3

就像是

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

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

于 2012-08-31T10:10:52.473 回答
3

如果你想实现你想要的行为,你必须使用函数 addEventListener 。

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

window.addEventListener("load",function () {
    alert("bla2");
}, false);
于 2012-08-31T10:12:50.607 回答
1

尝试这样的事情

function doOnLoad() {
        alert("hi");
        alert("bye");
}
window.onload = doOnLoad;
于 2012-08-31T10:11:58.387 回答
1

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 确实存在,因此它所持有的任何内容都将被新函数包裹起来。所以名单越来越长。

于 2014-03-13T11:24:49.413 回答
0

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

function hello() {
    window.alert("hello");
}

function bye() {
    window.alert("bye");
}

window.addEventListener("load", function() {
    hello();
    bye();
});
于 2017-01-31T00:31:36.080 回答