天天看點

淺談javascript中的onload事件

window. 是指當頁面加載完後執行的函數 但是這個函數有個缺點 就是不能執行多個window.onload 當第二次調用window. 第二次會覆寫第一次的函數  如下代碼:

<style> 

.small{ width:100px;height:100px;border:2px solid red; background:#906;}  

.big{ width:200px; height:200px;border:2px solid red; background:#906;}  

</style> 

<div id="small" class="small">aaaa</div> 

    <script> 

window.onload = initAll;  

        function initAll(){  

            var oo = document.getElementById("small");  

            oo.onclick = toBig;  

            function toBig(){  

                oo.className = "big";  

                oo.onclick = tosmall;     

            }     

            function tosmall(){  

                oo.className = "small";  

                oo.onclick = toBig;   

            }  

        }  

        </script> 

這上面的js代碼  我是測試 一張圖檔時候 圖檔變大 當我再點選時候 圖檔變小類似效果!改變他們的類!但是當我底部又有一個window. 就是第二次的window. 就會覆寫第一次的 比如<script>window. function(){alert(1)}</script>  都可以測試下,但是現在的問題是該怎麼解決這個問題呢!恩 可以先判斷下 看看上面是否已經定義了這個函數 如果定義的話 那麼我讓他先儲存一個變量中,然後當執行下個函數時候 再去執行它!這樣就可以二個函數一起執行呢!1 先判斷下 如下代碼:

<script>  

    var temp ;  

    //window.  

    if(typeof window.onload == "function"){  

        //讓目前的函數儲存在一個變量中      

        temp = window.  

    }  

    window.onload = function(){  

        //那麼現在我想不但要想執行我這個目前的函數 那麼上面的函數也要執行到 是以要調用下上面的函數  

        alert("我是最後一次執行到");  

        temp();   

    //上面的代碼都可以執行到  但是現在我們要封裝一個方法 addEvent  

   </script>  --> 

但是如果頁面上有多個這樣的事件監聽函數時候 我們用這種方式 也并不是很友善 我們可以先封裝一個函數 然後再調用它 ! 這個函數定義三個參數 第一個是“目前的對象obj” 第二個是"evt 事件類型",第三個是函數"fn",定于代碼如下:

// window.  

  function addEvent(obj,evt,fn){  

        //  現在要想的問題是 要給某個對象注冊多次事件監聽函數    

        //檢測目前的事件是否存在  

        var saved;  

        if( typeof obj["on" + evt] =="function"){  

            saved = obj["on" + evt];      

        obj["on"+evt] = function(){  

            if(saved) saved();  

            fn();     

</script> 

綜合上面的所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<title>無标題文檔</title> 

<script> 

// window.onload = initAll;  

</head> 

<body> 

    <div id="small" class="small">aaaa</div> 

        addEvent(window,"load",initAll);  

 <!--    <script> 

        var temp ;  

        //window.onload = function(){} //這樣的話會覆寫掉上面的函數 那麼現在的問題是應該我們檢測下 是否已經給某個對象注冊了事件  

        if(typeof window.onload == "function"){  

            //讓目前的函數儲存在一個變量中      

            temp = window.  

        window.onload = function(){  

            //那麼現在我想不但要想執行我這個目前的函數 那麼上面的函數也要執行到 是以要調用下上面的函數  

            alert("我是最後一次執行到");  

            temp();   

        //上面的代碼都可以執行到  但是現在我們要封裝一個方法 addEvent  

    </script>  --> 

        function test(){  

            alert(1);     

        addEvent(window,"load",test);  

    </script> 

</body> 

</html> 

像上面這樣運作代碼 可以給某個對象注冊多個監聽函數!

<a href="http://down.51cto.com/data/2359481" target="_blank">附件:http://down.51cto.com/data/2359481</a>

本文轉自 塗根華 51CTO部落格,原文連結:http://blog.51cto.com/tugenhua/743067,如需轉載請自行聯系原作者

繼續閱讀