可能你也碰到过这种情况 , 就是在 js 的代码中用了 window.onload 后 , 可能会影响到 body 中的onload 事件。你可以全写在 body 中,也可以全放到 window.onload 中,但是这样并不是很方便,有时我们需要两个同时用到。这时就要用 window.attachEvent 和 window.addEventListener 来解决一下。
下面是一个解决方法。
if (document.all){
window.attachEvent('onload', 函数名 )//IE 中
}
else{
window.addEventListener('load', 函数名 ,false);//firefox
} 在近来的工作中,用到了 attachEvent 方法,该方法可以为某一事件附加其它的处理事件,有时候可能比较有用,这里将其基本用法总结一下。
其语法可以查看《 DHTML 手册》,里面有详细的说明,这里贴一个例子,该例子来自互联网:
document.getElementById("btn").onclick = method1;
document.getElementById("btn").onclick = method2;
document.getElementById("btn").onclick = method3;
如果这样写 , 那么将会只有 medhot3 被执行
写成这样:
var btn1Obj = document.getElementById("btn1");
//object.attachEvent(event,function);
btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent("onclick",method2);
btn1Obj.attachEvent("onclick",method3);
执行顺序为 method3->method2->method1
如果是 Mozilla 系列,并不支持该方法,需要用到 addEventListener
var btn1Obj = document.getElementById("btn1");
//element.addEventListener(type,listener,useCapture);
btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener("click",method2,false);
btn1Obj.addEventListener("click",method3,false);
执行顺序为 method1->method2->method3
综合实例:
window.οnlοad=function(){function1();function2();}
function addLoadEvent(func){
var oldοnlοad=window.onload;
if(typeof window.onload!='function'){
window.οnlοad=func;
}else{
window.οnlοad=function(){
oldonload();
func();
}
}
}
添加要加载执行的事件 :
addLoadEvent(aaa);
addLoadEvent(bbb);
因此要想在你的程序中给一个事件指派多个处理过程的话,只要首先判断一下浏览器,然后根据不同的浏览器,选择使用 attachEvent 还是 addEventListener 就可以了。实例如下
if (document.all) {
window.attachEvent('onload', handler1);
window.attachEvent('onload', handler2);
} else {
window.addEventListener('load', handler1, false);
window.addEventListener('load', handler2, false);
}
<script type="text/javascript">
window.onload = function(){
var SDmodel = new scrollDoor();
SDmodel.sd(["m01","m02","m03","m04","m05"],["c01","c02","c03","c04","c05"],"sd01","sd02");
MqObj(leftnext,"960","109","10","")
}
</script>