2013-08-25 50 views
2

所以我一直在瀏覽Head First JavaScript,並且介紹了使用函數文字處理事件。本書解釋說,你可以將你所有的事件處理都放在你的'腳本'標籤中。但我很困惑我如何獲得多個功能來觸發一個事件。這裏是我的代碼:使用函數文字處理事件

//Event Handling with Function Literals 
    window.onload = function(evt) { 

//THIS IS BROKEN 
    document.body.onresize = resizeImg();reportImgHeight(); 

//Onload: Functions to Execute -- THESE WORK  
    resizeImg(); 
    reportImgHeight(); 
    } 

所以專門爲這個例子,我該如何得到一個「在onResize」事件同時執行resizeImgreportImgHeight(我在我的代碼的其他地方定義的函數)。謝謝!

+0

我認爲你應該尋找更好,至少更新的書。那本書已經五歲了。 – Pointy

+0

有什麼建議嗎? – ajavad

+0

那麼人們會說「JavaScript:好的部分」和「JavaScript忍者的祕密」。當沒有好書的時候,我學習了JavaScript(除了老書O'Reilly的書以外,它更像是一本教程的參考書),所以我錯過了一個好教程的好處。還有很多很棒的在線資源(比如這個地方!)。 – Pointy

回答

2

你將不得不這樣做

document.body.onresize = function(){ 
    resizeImg(); 
    reportImgHeight(); 
}; 

如果你想打電話給他們像他們將是,如果他們是分開的,你可以做這樣的事情

document.body.onresize = function(){ 
    resizeImg.apply(this, arguments); 
    reportImgHeight.apply(this, arguments); 
}; 

這通過this如果它是一個,你會擁有這個參數,並且參數傳遞給所有傳遞給事件的參數。

+0

這工作。謝謝。 – ajavad

3

最簡潔的解決方案是使用addEventListener

window.addEventListener('resize', resizeImg); 
window.addEventListener('resize', reportImgHeight); 

這樣你就可以去耦都綁定。

還請注意,您應該將resize事件綁定到窗口,而不是文檔部分。

+0

也有幫助。謝謝。 – ajavad

+0

請注意,此處不保證執行順序,因此'reportImageHeight'可能會報告錯誤的結果。正確的聽者方法仍然+1。 –

+2

@BenjaminGruenbaum執行順序是有保證的:http://www.w3.org/TR/DOM-Level-3-Events/#event-phase –