在Javascript中是否有+ = for window.onload?

ant*_*res 9 javascript asp.net jquery anonymous-function onload

最近我想出了以下问题:

在我所有html页面的网站中,我在body onLoad事件中调用了一个函数:

<body onLoad="func1();">
Run Code Online (Sandbox Code Playgroud)

这是我的html模板的一部分,因此它出现在我网站的每个页面上,我无法改变它.现在,交易是在某些页面上,我需要调用一些其他函数onload,我尝试使用window.onload属性,但它擦除了func1的调用...

我现在可以说:

window.onload = func2(); //where func2() calls to func1()
Run Code Online (Sandbox Code Playgroud)

但这看起来很脏又蹩脚?不是吗?

那么,有没有办法将一些函数添加到即将执行onload的那些函数而不删除旧函数?另外我使用asp.net,如果这可以帮助...

谢谢!

Viv*_*ath 19

您可以使用jQuery链接加载处理程序.反复使用jQuery.loadjQuery(document).ready将链接您的处理程序(我相信).您还可以选择以编程方式执行此操作,这意味着您需要一个辅助函数来为您链接onload处理程序.您可以使用闭包(或匿名函数)执行此操作:

var addOnLoadHandler = function(newHandler) {

    if (typeof window.onload != 'function') {
        window.onload = newHandler;
    }

    else {
        var oldHandler = window.onload;
        window.onload = function() {
            if (oldHandler) {
                oldHandler();
            }
            newHandler();
        };
    }
};
Run Code Online (Sandbox Code Playgroud)

您必须以编程方式绑定您的函数,因此您必须这样做:

addOnLoadHandlers(function() {
 alert("Hi I am the first onLoad handler!");
});

addOnLoadHandlers(function() {
 alert("Hi I am the second onLoad handler!");
});
Run Code Online (Sandbox Code Playgroud)

在javascript文件中(或在您的html文件中).

另一种方法是使用数组:

var onloaders = new Array();

function runOnLoads() {
    for (i = 0; i < onloaders.length; i++) {
        try {
            var handler = onloaders[i];
            handler();
        } catch(error) {
            alert(error.message);
        }
    }
}

function addLoader(obj) {
    onloaders[onloaders.length] = obj;
}
Run Code Online (Sandbox Code Playgroud)

在您的HTML或Javascript文件中,您执行以下操作:

addLoader(function() {
 alert("Hi I am the first onLoad handler!");
});

addLoader(function() {
 alert("Hi I am the second onLoad handler!");
});
Run Code Online (Sandbox Code Playgroud)

然后在你的HTML中,你可以做到 <body onload="runOnLoads()">


Dan*_*llo 5

您可能希望充分利用匿名函数:

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    }
    else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

借鉴了有史以来十大自定义JavaScript功能.


小智 5

jQuery有一个很好的简写,用于向"ready"事件添加多个定义的处理程序(不能使用匿名函数,你必须使用$(document).ready(function(){});).

只是

$(myFunction);
$(myFunction2);
Run Code Online (Sandbox Code Playgroud)

一个很大的优点是,如果DOM已经加载,这仍然会被触发,而在事件之后绑定到window.onload的任何东西都不会被调用.