解决一个页面多个window.onload问题

<pre name="code" class="html"><title>两个window.onload测试</title>
<script type="text/javascript" src="js/testOne.js"></script>
<script type="text/javascript">
    alert("开始");
    window.onload = function()
    {
	alert("第一个");
	};
	window.onload = function()
	{
		alert("第二个");
	};
</script>
</head>
<body>
<div>window.onload</div>
</body>


 

不仅仅适用于 window 对象,还可用文档节点、document 或 XMLHttpRequest。

在页面中,只会执行后一个window.onload ,如果交换了两个function的位置,那么也是最后一个会覆盖前面的所有函数.

解决方法一:

<script type="text/javascript">
window.οnlοad=function(){
  function a(){
    document.getElementById("bg").style.backgroundColor="#F90";
  }
  function b(){
    document.getElementById("bg").style.width="200px";
  }
  a();
  b();
}
</script>
</head>
<body>
  <div id="bg"></div>
</body>

运行后,两个方法都会执行(宽度和背景颜色都会显示)。

解决方法二:

可以使用addEventListener()attachEvent()为onload事件绑定事件处理函数

<span style="font-size:12px;"><script type="text/javascript">
window.addEventListener("<span style="background-color: rgb(255, 0, 0);">load</span>",bg,<span style="color:#FF0000;">false</span>);//<span style="font-size:12px;">addEventListener()是当前标准的一种事件处理函数绑定方式</span>,<span style="font-size:12px;">IE8和IE8以下的浏览器并不支持此方式</span>
<span style="color:#FF0000;">window.addEventListener("load",changeW,false);<code class="html plain"><span style="font-family:微软雅黑, 微软雅黑, sans-serif;font-size:12px;"><span style="LINE-HEIGHT: 20px; WORD-SPACING: 1px;">//用于Mozilla/Firefox </span></span></code></span>

//<code class="html plain">window.attachEvent("<span style="color:#FF0000;">onload</span>",bg);<span style="font-family:微软雅黑, 微软雅黑, sans-serif;font-size:12px;color:#111111;"><span style="LINE-HEIGHT: 20px; WORD-SPACING: 1px;"></span></span></code><code class="html plain"><span style="color:#111111;"><span style="font-family:微软雅黑, 微软雅黑, sans-serif;">//</span></span>attachEvent</code>事件是以"on"开头的,而addEventListener,事件不是以"on"开头,还有第三个参数,一般指定false就可以。<code class="html plain"><span style="font-family:微软雅黑, 微软雅黑, sans-serif;font-size:12px;color:#111111;"><span style="LINE-HEIGHT: 20px; WORD-SPACING: 1px;"></span></span></code></span><div class="line number16 index15 alt1"><code class="html plain">//<span style="color:#FF0000;">window.attachEvent("onload",changeW);//</span></code><span style="color:#FF0000;"><code class="html plain"><span style="font-family:微软雅黑, 微软雅黑, sans-serif;font-size:12px;"><span style="LINE-HEIGHT: 20px; WORD-SPACING: 1px;">,</span></span></code><code class="html plain"><span style="font-family:微软雅黑, 微软雅黑, sans-serif;font-size:12px;"><span style="LINE-HEIGHT: 20px; WORD-SPACING: 1px;">Mozilla/Firefox不支持这个方法,</span></span></code><code class="html plain"><span style="font-family:微软雅黑, 微软雅黑, sans-serif;font-size:12px;"><span style="LINE-HEIGHT: 20px; WORD-SPACING: 1px;">,用于IE</span></span></code></span><code class="html plain"><span style="font-family:微软雅黑, 微软雅黑, sans-serif;font-size:12px;color:#111111;"><span style="LINE-HEIGHT: 20px; WORD-SPACING: 1px;"></span></span></code></div>
 function bg(){
  document.getElementById("bg").style.backgroundColor="#F90";
}
function changeW(){
  document.getElementById("bg").style.width="2000px";
}
</script>
</head>
<body>
  <div id="bg">招待费</div>
</body>
为了兼容各浏览器,需要将以上代码进行改造:
<script type="text/javascript">
//<span style="font-size:12px;">通过if语句判断对象是否具有addEventListener属性,如果有这使用addEventListener()函数,否则使用attachEvent()函数。</span>
 <span style="color:#FF0000;">if(window.addEventListener){
  window.addEventListener("load",bg,false);
  window.addEventListener("load",changeW,false);
}
else{
  window.attachEvent("onload",bg);
  window.attachEvent("onload",changeW);
}</span>
 
function bg(){
  document.getElementById("bg").style.backgroundColor="#F90";
}
function changeW(){
  document.getElementById("bg").style.width="200px";
}
</script>
  1. 在近来的工作中,用到了attachEvent方法,该方法可以为某一事件附加其它的处理事件,有时候可能比较有用,这里将其基本用法总结一下。  
  2. 其语法可以查看《DHTML手册》,里面有详细的说明,这里贴一个例子,该例子来自互联网:  
  3. document.getElementByIdx_x_x_x("btn").onclick = method1;  
  4. document.getElementByIdx_x_x_x("btn").onclick = method2;  
  5. document.getElementByIdx_x_x_x("btn").onclick = method3;  
  6. 如果这样写,那么将会只有medhot3被执行   
  7. 写成这样:   
  8. var btn1Obj =document.getElementByIdx_x_x_x("btn1");  
  9. //object.attachEvent(event,function);  
  10. btn1Obj.attachEvent("onclick",method1);  
  11. btn1Obj.attachEvent("onclick",method2);  
  12. btn1Obj.attachEvent("onclick",method3);  
  13. 执行顺序为method3->method2->method1  
  14. 如果是Mozilla系列,并不支持该方法,需要用到addEventListener  
  15. var btn1Obj =document.getElementByIdx_x_x_x("btn1");  
  16. //element.addEventListener(type,listener,useCapture);  
  17. btn1Obj.addEventListener("click",method1,false);  
  18. btn1Obj.addEventListener("click",method2,false);  
  19. btn1Obj.addEventListener("click",method3,false);  
  20. 执行顺序为method1->method2->method3  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值