javascript window.onload 加载多个函数的方法

时间:2021-04-21 22:58:35

用法如下:

function func(){alert("this is window onload event!");return;}
window.onload=func;

或者如下:

window.onload=function(){alert("this is window onload event!");return;} 

但window.onload 不能同时加载多个函数。

比如:

代码如下:

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

后面会把前面的覆盖,上面代码只会输出 b。

此时可用如下方法解决:

window.onload =function() { t(); b(); } 

另一种解决方法如下:

代码如下:

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}

使用如下:

代码如下:

function t(){
alert("t")
}
function b(){
alert("b")
}
function c(){
alert("c")
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
} addLoadEvent(t);
addLoadEvent(b);
addLoadEvent(c);
//等价于 window.onload =function() { t(); b(); c() ;}

说明:上面的写法是window.onload加载多个函数写法:

理解:如果(typeof window.onload != 'function')也就是说window.onload还没有被赋值,就直接把它赋值为func。否则,说明有程序先对其赋值了,那么在页面加载完成之后,应该先执行现有函数再执行自己的新的func。这里现有函数是oldonload()有问题,因为没有赋值。应该是:
else {
var oldonload = window.onload;
window.onload=function(){oldonload();func();}
}
这里先用oldonload变量把现有的window.onload存下来。然后【应该先执行现有函数再执行自己的新的func】是两件事。为了按顺序完成两件事,所以这里又多写了一个函数,函数内容是{oldonload();func();}然后这个函数被赋值给了window.onload。

个人以为直接使用隐式函数(如:window.onload =function() { t(); b(); c() ;})更快捷,当然使用 addLoadEvent 更professional,各取所好吧!