同一个web页面多个onload只执行一个

正常来说,一个web页面只会设置一个window.onload。但是如果使用到了页面嵌套(如php的include),则有可能会出现一个web页面出现多个window.onload。这时,我们会发现,只有一个window.onload里的代码被执行了。有以下两种方法可以解决这个问题。

一、使用addEventListener()

这时候我们可以使用HTML DOM的addEventListener()方法来代替window.onload。使用方法如下:

function onload2(){
}
if (window.attachEvent){
	//IE8及以下中支持的方法,事件以on开头,如onload
	window.attachEvent("onload", onload2);//这里只写方法名,不要跟()
} else if (window.addEventListener) {
	//IE9及以上/Mozilla/Firefox的方法,事件不以on开头,如load
	window.addEventListener("load", onload2, false);
}

Internet Explorer从5.0开始,提供了attachEvent方法,使用这个方法,可以一个事件,绑定多个处理过程。但是Mozilla/Firefox并不支持这个方法,它使用另外一个方法addEventListener(IE9及以上也开始支持此方法)。它们之间有少许区别,在attachEvent方法中,事件是以"on"开头的,而addEventListener,事件不是以"on"开头,另外,addEventListener还有第三个参数,一般指定false就可以。
因此,在程序中,给一个事件指派多个处理过程的话。需要根据不同的浏览器,选择使用attachEvent和addEventListener。

二、自己实现add方法

或者,也可以自己写add方法:

function addLoadEvent(func) {
	var oldonload = window.onload;
	if(typeof window.onload != 'function'){
		window.onload = func;
	}else{
		window.onload = function(){
			oldonload();
			func();
		}
	}
}
window.onload = function(){
	alert("第一个onload");
}
function secondOnload(){
	alert("第二个onload");
}
addLoadEvent(secondOnload);
addLoadEvent(function(){
	alert("第三个onload");
});

三、addEventListener的其它用处

DOM的addEventListener()可以使用的地方很多。如:

//同一个按钮添加多个onclick事件,且不会覆盖之前的onclick事件
//事件名不要出现"on"
document.getElementById("myBtn").addEventListener("click", myFunction);
document.getElementById("myBtn").addEventListener("click", someOtherFunction);
//为同一个按钮添加多个不同事件
document.getElementById("myBtn").addEventListener("mouseover", myFunction);
document.getElementById("myBtn").addEventListener("click", someOtherFunction);
document.getElementById("myBtn").addEventListener("mouseout", someOtherFunction);

如果需要调用的function有带参数,可以先调用匿名函数,然后在匿名函数中调用带参函数:

document.getElementById("myBtn").addEventListener("click", function() {
	myFunction(p1, p2);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴趣广泛的程序猿

有钱的捧个钱场,谢谢各位!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值