`

如果你有两个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();
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mtzai/archive/2009/11/21/4846404.aspx

分享到:
评论
1 楼 watch 2010-06-01  
呵呵,强大的不得了

相关推荐

    脱离document.onload和window.onload的onload事件

    脱离document.onload和window.onload的onload事件,可多次添加加载事件!

    HTML5跨年烟花动画效果

    window.onload = function(){ initAnimate() } function initAnimate(){ drawBg(); lastTime = new Date(); animate(); } var lastTime; function animate(){ ctx.save(); ctx....

    CSS40个布局实例

    window.onload=function(){SetWidth()}; window.onresize=function(){SetWidth()}; function SetWidth(){ if(!document.getElementById) return; var w=$("gallery").offsetWidth-20; if(w>0 && w!=null){ $(...

    shake.js应用和资源

    window.onload = function() { var myShakeEvent = new Shake({ threshold: 15 }); myShakeEvent.start(); window.addEventListener('shake', shakeEventDidOccur, false); function ...

    弹出窗口加入时间限制

    window.onload=function init(){timer=setInterval(function(){if(flag)self.close();else flag=true},timeout)} 3.完整代码。 <script> var flag=true,timeout=3000,timer document.onmousemove=document....

    菜单栏不刷新

    window.onload = function() { var show_item = "opt_1"; if (getCookie("show_item") != null) { show_item= "opt_" + getCookie("show_item"); } document.getElementById(show_item).style.display = "block...

    Web前端开发工程师笔试题及答案

    腾迅Web前端开发工程师笔试题及答案 ...function elementName(evt){ evt = evt|| window.... window.onload = function(){ var el = document.getElementsByTagName('body'); el[0].onclick = elementName; } ......

    jquery.loadImage.1.0 绑定图片加载完成事件

    基于jquery开发的一个小插件,主要作用是绑定图片(img标签)的onload事件,如果是纯JavaScript开发,可借鉴下面的代码: var imgLoad = function (url, callback) { var img = new Image(); img.src = url; if ...

    jQuery的鼠标拖动翻页js特效代码.zip

    window.onload=function(){ page=id("menu").getElementsByTagName("div"); if(page.length>0){ page[0].style.zIndex=2; } for(i=0;i<page.length;i ){ page[i][removed] ="<span class=\"tip\">" (i 1) "/" ...

    JS搜索框提示 纯JS 结构无数据库

    window.onload =function() { arrList.sort(function(a,b){ if(a.length>b.length)return 1; else if(a.length==b.length)return a.localeCompare(b); else return -1; }) var objouter=document....

    超炫JS代码,如同flash的图片轮换

    图片轮换。实现flash效果 var currslid = 0; var slidint; function setfoc(id){ document.getElementById("focpic").src = picarry[id]; document.getElementById(...window.onload = function(){ playit(); }

    可拖动的table

    window.onload = function(){ var obj = document.getElementById('draggable'); rDrag.init(obj); } <div id="draggable"> <div style=margin:0px,0px,0px,200px > <table cellspacing="0" cellpadding=...

    树形伸缩导航js效果

    window.onload = function() { myMenu = new SDMenu("my_menu"); myMenu.speed = 5; // Menu sliding speed (1 - 5 recomended) myMenu.remember = true; // Store menu states (expanded or collapsed) ...

    球状标签.rar ) 3d标签

    window.onload=function () { var i=0; var oTag=null; oDiv=document.getElementById('div1'); aA=oDiv.getElementsByTagName('a'); for(i=0;i<aA.length;i++) { oTag={}; oTag.offsetWidth=aA...

    任意拖动的视频播放器

    main.controlBar.scrubber.back.onRelease = controlBar.scrubber.back.onReleaseOutside=function () { var p = (this._xmouse-37)/swidth; if (p<=lprog) { ns.seek(p*dur); } else { ns.seek(lprog); } }...

    实现原生js随机点菜的代码.zip

    window.onload = function(){ var btn = document.getElementById('btn'); var cm = document.getElementById('cm'); // 获取html中的菜单 var menu = document.getElementsByTagName('span'); var ...

    window.onload

    window.onload insertAfter()

    onload和jquery运行顺序

    window.onload = function () { console.log('window.onload 方式执行') } $(document).ready(function () { console.log('$(document).ready(function(){}) 方式执行') })

    javascript小技巧

    window.onresize=new Function("window.location.reload()") } function setmessage2(){ topmsg=new Layer(window.innerWidth) topmsg.bgColor=backgroundcolor regenerate2() topmsg.document.write(message) ...

    jquery 笔记(自己学习jquery整理好的)

    window.onload=function(){ var otable = document.getElementById('oTable'); for(var i=0 ; i<otable.rows.length ; i++){ if(i%2==0) otable.rows[i].className = 'alrow'; } } $(function(){ $(table....

Global site tag (gtag.js) - Google Analytics