香港虚拟主机
本站公告
新闻资讯
虚拟主机帮助
域名帮助
服务器帮助
邮箱帮助
建站帮助
网站推广帮助
VPS帮助
特色主机帮助
网站备案专题
会员帮助信息
代理帮助信息
成功案例
我司获香港虚拟主机排行榜十…
香港虚拟主机金秋促销活动正…
百度整治给SEO带来了新的希望
百度同时收录网站带WWW和不带…
百度对原创内容的判断标准 如…
如何建设网站 网站建设三步曲
如何挑选老域名 老域名有那些…
域名常见故障与分析
虚拟主机基本参数介绍
交换链接的技巧 谈一下选择交…
您现在的位置: 江南数联 >> 帮助中心 >> 建站帮助 >> 正文

如果你有两个window.onload=function(){} 引起冲突

  作者:admin    来源:本站原创    点击次数:29     更新时间:2012-8-28 6:55:29  
     
 
关注石头有礼
 
 

如果你有两个window.onload=function(){} 引起冲突

不要奇怪。

为什么会出现两个window.onload。

很久很久以前。

我一直不明白为什么 有的 JavaScript 必须写在页面的底部才会正常执行。

而放到页面的head区则没有任何反应。

后来我明白了 因为页面加载速度的原因。

有的JavaScript脚本必须等待页面加载结束 才能正常执行。

对于这样的情况有两个解决方法:

1、将脚本写到html的结束位置。这样只有html全部接在完毕后才会加载执行JavaScript脚本。

2、将脚本放在任意位置。通过 window.onload来执行脚本。

window.onload的意思是当页面加载完毕的时候执行。

很久很久以后,我遇到了一个新的问题。

我有两个window.onload=function(){};


我自己写一个函数(T_T不是类,我蹩脚的JavaScript还不会封装类哦!)。这个函数必须在页面加载完毕之后才能正常执行。

开始我就写了一个window.onload来执行这个函数。

然后我发现了这行不通。

我写这个函数就是为了封装好给别人用的。

最终目的是 只要在页面里引用这个JavaScript脚本就可以实现相关功能。

但是现在这个脚本占用了window.onload……。

而通常一个页面是只能执行一个window.onload的。

假设某个用户使用了我这个脚本。

而他因为其他原因需要用到window.onload那不是冲突了……。

两个只能活一个啊……。

那假如我有两个window.onload应该怎么办呢?

这时就要用window.attachEvent和window.addEventListener来解决一下。

当某一事件被触发时需要执行某个函数,在IE下可用attachEvent,在FF下则要用addEventListener。

attachEvent()有两个参数,第一个是事件名称,第二个是需执行的函数;

addEventListener()有三个参数,第一个是事件名称,但与IE事件不同的是,事件不带"on",比如"onsubmit"在这里应为"submit",第二个是需执行的函数,第三个参数为布尔值;

if (document.all){

window.attachEvent('onload',函数名)//IE中

}

else{

window.addEventListener('load',函数名,false);//firefox

}

使用上边的脚本来执行我的函数就可以不与其他的onload冲突啦!

这真是太爽了!

看到prototype.js中有个Event.observe的方法可以实现这种功能。不过为了这个在加载个prototype.js。有点累赘哦。


解决多个window.onload的冲突.txt

window.onload=function(){
   alert("加载完成");
   onload2();
   onload3();
}


例子:

下面是两个windows.onload()

 

例子一:

          <script type=text/javascript><!--//--><![CDATA[//><!--
function menuFix() {
 var sfEls = document.getElementByIdx_x("head-nav").getElementsByTagName_r("li");
 for (var i=0; i<sfEls.length; i++) {
  sfEls[i].onmouseover=function() {
  this.className+=(this.className.length>0? " ": "") + "sfhover";
  }
  sfEls[i].onMouseDown=function() {
  this.className+=(this.className.length>0? " ": "") + "sfhover";
  }
  sfEls[i].onMouseUp=function() {
  this.className+=(this.className.length>0? " ": "") + "sfhover";
  }
  sfEls[i].onmouseout=function() {
  this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"),

"");
  }
 }
}
window.onload=menuFix;

//--><!]]></script>

 

例子二:

<script LANGUAGE="Javascript">
var tm=null
function newsScroll() {
if(scrollimg.parentNode.scrollLeft!=(scrollimg.clientWidth/2))
scrollimg.parentNode.scrollLeft++;
else
scrollimg.parentNode.scrollLeft=0
}
window.onload=function() {
simg1.innerHTML=simg.innerHTML
tm=setInterval('newsScroll()',40)
}
function stop()
{
clearInterval(tm)
}
function start()
{
tm=setInterval('newsScroll()',40)
}
</script>

 

这样放在一个页面里是冲突的

 

修改后

例子一:

          <script type=text/javascript><!--//--><![CDATA[//><!--
function menuFix() {
 var sfEls = document.getElementByIdx_x("head-nav").getElementsByTagName_r("li");
 for (var i=0; i<sfEls.length; i++) {
  sfEls[i].onmouseover=function() {
  this.className+=(this.className.length>0? " ": "") + "sfhover";
  }
  sfEls[i].onMouseDown=function() {
  this.className+=(this.className.length>0? " ": "") + "sfhover";
  }
  sfEls[i].onMouseUp=function() {
  this.className+=(this.className.length>0? " ": "") + "sfhover";
  }
  sfEls[i].onmouseout=function() {
  this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"),

"");
  }
 }
}
window.onload=menuFix;

//--><!]]></script>

 

例子二:

<script LANGUAGE="Javascript">
var tm=null
function newsScroll() {
if(scrollimg.parentNode.scrollLeft!=(scrollimg.clientWidth/2))
scrollimg.parentNode.scrollLeft++;
else
scrollimg.parentNode.scrollLeft=0
}
function ceshih()
{
simg1.innerHTML=simg.innerHTML
tm=setInterval('newsScroll()',40)
}
window.attachEvent('onload',ceshih)
function stop()
{
clearInterval(tm)
}
function start()
{
tm=setInterval('newsScroll()',40)
}
</script>

本章关健词:江南数联 域名注册 海外虚拟主机 G享虚拟主机 国内虚拟主机 企业邮箱 网站建设 自助建站 400电话申请 微聚商

 
  版权申请:如果你有两个window.onload=function(){} 引起冲突出自江南数联dns06.com未经授权请勿转载!  
 
  • 上一篇帮助:

  • 下一篇帮助:
  •  
         

    扫一扫关注公众号有礼
    Copyright@2004-2015 江南数联 版权所有未经授权请勿复制!
    《中华人民共和国增值电信业务经营许可证》ISP证编号:皖B2-20080036 湘B2-20160056
    公司全称:永州石头网络技术有限公司(运营部)
    地址: 中国·湖南省永州市育才路158号 服务热线:400 616 9260
    安徽公司:安徽仁科信息技术有限公司 地址:合肥万和新城广场A-608 
    关注词:网站空间虚拟空间空间域名域名空间域名主机网站空间哪家好网站空间多少钱