2014-05-05 92 views
1

我使用下面的代碼,正在加載的文件,爲什麼?

document.addEventListener("DOMContentLoaded", registerEvents, false); 

    function registerEvents(){ 
     var frameHeight = window.innerHeight; 
     var fixedHeight = document.getElementById("fixedSection").clientHeight; 

     document.getElementById("dynamic_frame").height = (frameHeight - fixedHeight)  -50; 

     document.getElementById("home").addEventListener("click", loadPage("home"), false); 
    } 

    function loadPage(page){ 
     document.getElementById("dynamic_frame").src = "../htmls/"+ page+ ".html"; 
} 

,我想,當我點擊的ID爲家庭元素,將加載該文件,而是它會在加載網頁第一次加載時。

我做錯了什麼?

+1

爲什麼當你不使用任何jQuery時,這標記jQuery?建議使用 – JJJ

+0

。沒關係 – Snappiestjack

+3

@Snappiestjack它確實很重要 – celeriko

回答

2

此行是不是做了什麼你覺得它在做什麼:

loadPage("home") 

你使用它就像到loadPage函數的引用,但它實際上調用loadPage功能和被用作參考該函數的結果(恰好是undefined)。因此,不是將click事件綁定到函數,而是立即調用該函數並將單擊事件綁定到undefined

爲了只是參考的功能,你需要不使用小括號:

loadPage 

不過,既然你也想的參數傳遞給它,你可能需要一個回調函數專門用於這一目的。事情是這樣的:

document.getElementById("home").addEventListener("click", function() { loadPage("home"); }, false); 

此包裝調用loadPage在一個匿名函數,它不需要任何參數。這個匿名函數將在click事件中被調用,並且它在內部執行的所有操作都是用你想要的參數調用你想要的函數。

相關問題