一 多個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只允許指定一次,沖突是必然的;如果要指定多個,同上的方法