JS中多個onload沖突解決辦法


一  多個window.onload沖突

在一個頁面中有兩個JavaScript 分別都用到了window.onload
一個是:window.onload=externallinks,另一個是:window.onload=beijing2008
這樣就造成了一個JavaScript 運行不了。

寫成這樣就可以了window.onload=function(){externallinks();beijing2008();}

還有一種方法,舉個例子

<script type="text/javascript">
function $(obj){return document.getElementById(obj);}
window.onload=function(){
   onload2();
   onload3();
}
function onload2(){
   $("aa").onclick=function dd(){alert("haha")};
}
function onload3(){
   alert("加載完成");
}</script>

第三種方法:

用window.attachEvent和 window.addEventListener來解決問題了。
當某一事件被觸發時需要執行某個函數,在IE下可用attachEvent,在FF下則要用addEventListener。
attachEvent()有兩個參數,第一個是事件名稱,第二個是需執行的函數;
addEventListener()有三個參數,第一個是事件名稱,但與IE事件不同的是,事件不帶"on",比如"onsubmit"在這里應為"submit",第二個是需執行的函數,第三個參數為布爾值;
例如:(可以在IE和FF下分別測試):
<input type="button" id="ie" value=" IE " />
<input type="button" id="ff" value=" FF " />
<script type="text/javascript">
var isIE = (document.all && window.ActiveXObject && !window.opera) ? true : false;
if(isIE)
{
 document.getElementById(’ie’).attachEvent("onclick", Fun);
}
else
{
 document.getElementById(’ff’).addEventListener("click", Fun, false);
}
function Fun()
{
 if(isIE)
 {
  alert(’I\’m IE’);
 }
 else
 {
  alert(’I\’m Not IE’);
 }
 
}
</script>
所以我們可以直接這樣編寫:
if (document.all){
 window.attachEvent("onload",調用函數名)//對於IE
}
else{
 window.addEventListener("load",調用函數名,false);//對於FireFox
}

二  window.onload 與body onload沖突

onload事件是window對象才有的,<body onload="func">這樣設置只是為了方便,其實仍然是window.onload=func,且window.onload只允許指定一次,沖突是必然的;如果要指定多個,同上的方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM