window.onload事件處理函數在頁面載入完畢後調用。 問題是有時我們給window.onload事件處理函數綁定不止一個函數,並且有一些函數函數帶有參數的。 下麵是兩個參數函數,其中一個有參數,另一個沒有參數。 一、以前的做法是直接綁定。 二、addLoadEvent()函數 綁定不帶參數的 ...
window.onload事件處理函數在頁面載入完畢後調用。
問題是有時我們給window.onload事件處理函數綁定不止一個函數,並且有一些函數函數帶有參數的。
下麵是兩個參數函數,其中一個有參數,另一個沒有參數。
function function1() { if(!document.getElementById("placeHolder")) return false;//流控制語句if自動執行相應的Boolean轉換(參見《JavaScript 高級程式設計》 P27) var placeHolder = document.getElementById("placeHolder"); var textNode = document.createTextNode("This is function1 which doesnot have options.") placeHolder.appendChild(textNode); var br = document.createElement("br"); placeHolder.appendChild(br); } function function2(elementId) { if(!document.getElementById(elementId)) return false; var placeHolder = document.getElementById(elementId); var textNode = document.createTextNode("This is function2 which has options.") placeHolder.appendChild(textNode); var br = document.createElement("br"); placeHolder.appendChild(br); }
一、以前的做法是直接綁定。
//一個函數時有沒有()都可以,為了和有參數的函數對應,最好都帶有參數
window.onload = function1; window.onload = function1(); window.onload = function2("placeHolder"); window.onload = function() {//添加多個函數時正確的用法 function1(); function2("placeHolder"); } window.onload = function() {//這是錯誤的用法 function1; function2; }
二、addLoadEvent()函數
綁定不帶參數的版本:
function addLoadEvent(func) { var oldOnload = window.onload; if( typeof window.onload != "function") { window.onload = func; } else { window.onload = function() { oldOnload(); func(); } } }
這個函數是由Simon Willison編寫的,只有一個參數:打算在頁面載入後執行的函數的名字。
需要註意的有兩點:
1、函數的名字,說明不能帶有參數。
2、這個函數的名字相當於一個變數,這個變數的類型是“function”,所以這裡的函數的名字不能用引號。
綁定帶參數的版本:
function addLoadEventTest(func) { var ages = [].slice.call(arguments,1); var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = function() { func.apply(this,ages); } } else { window.onload = function() { oldonload.apply(this); func.apply(this,ages); } } }
PS: 上面的代碼是我百度的,初入前端js,以後再來填坑。
函數是能解決載入有參數的函數的問題,但是我發現,這個函數還是有問題的,無法解決多個函數調用順序問題。。。。。。。原來的函數也有這個問題。