window.onload的一些說明


window.onload事件對於初學者來說,經常會讓我們感覺不好理解,並且經常會犯一些錯誤,初學js的時候經常碰到有關於它的問題,我想和我一樣很多初學者也會碰到,那時候不懂它的具體作用,只要一寫代碼就用window.onload,基本寫一個方法就用一次,往往在同一個頁面里面會多次去使用它,那時候甚至以為它是方法的一部分,在寫方法時必須要用到它,當然這是一個誤區,下面是以前初學時的用法:

window.onload = function(){
    ......
}
window.onload = function(){
    ......
}

  

但是每次這么寫完都會出問題,不是這個方法沒執行,就是那個方法沒起作用!

起初並不明白,這到底是為什么?后來經過多次實踐發現:

每個頁面只能使用一次window.onload,而且多次使用的話,只有最后一次綁定的方法可以執行!

這是什么原因了?我們應該怎么正確的使用它了?它的作用又是什么了?怎么給他綁定多個方法了?我想這些應該是很多初學者都會有的疑問!

下面我們就來好好的了解一下window.onload!

看這樣一段代碼:

<html>
<head>
<title>hello world</title>
<script type="text/javascript">
    var oBox = document.getElementById("box");
    oBox.style.color = red;
</script>
</head>
<body>
    <div id="box">hello world!</div>
</body>
</html>

  

首先window.onload的作用是當頁面加載完成后自動觸發該事件,有時候我們會在網頁頭部加載或直接寫js,這樣在頁面加載到js的時候,頁面的body里的標簽等都還沒有加載到,而我們寫js經常會獲取頁面的dom元素,如上例所示,在這種情況下,我們執行上例代碼,不但無法獲得我們想要的結果,而且還會報錯!就是因為在頁面加載到並執行js的時候頁面標簽還沒有加載出來!所以這時候獲取標簽會報錯!這是我們可以用window.onload來修改上面代碼:

<html>
<head>
<title>hello world</title>
<script type="text/javascript">
    window.onload = function(){
        var oBox = document.getElementById("box");
        oBox.style.color = red;
    }
</script>
</head>
<body>
    <div id="box">hello world!</div>
</body>
</html>

  

這樣就不會有問題了!當然你也可以不使用window.onload而改為把js代碼寫在頁面底部也是不會有為題的!

 

window.onload的用法如下:

window.onload = function(){
    alert("hello world!");
}

  

或者這樣:

function sayHello(){
    alert("hello world!");
}
window.onload = sayHello;//值得注意的是,這里只需寫方法名,不能加小括號,因為這里相當於是對方法的一個引用,加小括號的話就變成調用了!

  

其次使用上面的方法window.onload是不能同時加載多個函數的!這是為什么了?

其實,在這里,我們不妨把window.onload當成是一個變量,把函數綁定看成是給變量賦值,這樣就比較好理解了,當我們多次給同一個變量賦值時,后賦的值會覆蓋掉前面所賦的值!同樣的道理,在一般方法的事件綁定中,后綁定的函數會覆蓋掉先綁定的函數!這就是多次綁定,只執行最后一次綁定方法的原因!

那么我們怎么給他綁定多個函數了?其實我們可以這樣處理:

function a1(){......}//方法一
function a2(){......}//方法二
......
function an(){......}//方法n
//事件綁定
window.onload = function(){
    a1();
    a2();
    ...
    an();//注意,這里是方法調用,所以必須有小括號
}

  

那么如果我們在前面已經給window.onload綁定了函數,后面又要進行綁定,那該怎么辦了?不要着急,辦法總是有的,請看這里:

function addLoadEvent(func) {
    var oldonload = window.onload;//得到上一個onload事件的函數
    if (typeof window.onload != 'function') {//判斷類型是否為'function',注意typeof返回的是字符串,如果不是,直接綁定!
        window.onload = func;
    } else {  //如果是:
        window.onload = function() {
            oldonload();//調用之前覆蓋的onload事件的函數
            func();//調用當前事件函數
        }
    }
}

  

我們可以使用上訴方法來嘗試一下,看看具體用法:

function t(){
    alert("t")
}
function b(){
    alert("b")
}
function c(){
    alert("c")
}
 
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {  
        window.onload = function() {
            oldonload();
            func();
        }
    }
}

addLoadEvent(t);
addLoadEvent(b);
addLoadEvent(c);
//等價於  window.onload =function() { t();  b(); c() ;}

  

以上就是關於window.onload綁定多個函數的一些方法,當然你還可以使用attachEvent和attachEvent來進行事件綁定,在這里就不多做介紹了,有興趣的同學可以去百度一下!

好了,看到這里相信到家對window.onload應該有一個比較基本的了解了,當然由於本人水平有限,所以講解的不是很透徹還請各位看官多多包含!

 

本文由 平凡公子原創並首次發布,歡迎轉載(轉載請注明作者及本文地址)!


免責聲明!

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



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