使用window.onload超过1次

Using window.onload more than 1 times

本文关键字:1次 超过 onload window 使用      更新时间:2023-09-26

如果我写这个

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

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

一切正常,出现两次警报,但如果代码为

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

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

第二个警报没有发生,请告诉某人,为什么2个或多个窗口。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处理加载事件的方式不同。

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

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

试试这样的

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

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.onlead本身为未定义,所以返回的是一个只有myNewFunction()内部。在随后的window.onload分配中,window.onload确实存在,所以它包含的所有内容都将被封装新功能。因此,名单越来越多。

我知道我的答案太晚了,但你可以试试这样的方法:

function hello() {
    window.alert("hello");
}
function bye() {
    window.alert("bye");
}
window.addEventListener("load", function() {
    hello();
    bye();
});