2013-03-20 63 views
2

所以,我有一個簡單我如何通過一個命名函數從事件

$(document).on('#happyButton', 'click', function(event) { 
    event.preventDefault(); 
    //more goes here... 
}); 

,我想將其轉換成到一個類似於:

doStuff = function(event) { 
    event.preventDefault(); 
    //more goes here... 
} 

$(document).on('#happyButton', 'click', doStuff(event)); 

至於能要將此代碼放在不同的地方,更重要的是運行這個別處:

$(document).off('#happyButton', 'click', doStuff(event)); 

不幸的是,這給了我一個錯誤:

Uncaught TypeError: Cannot call method 'preventDefault' of undefined 

現在,的答案是 「用脊樑!」但這是以前代碼的重構,我沒有奢侈的時間來重構它。我也可以做一個簡單的

$('#happyButton').off() 

,我將作爲必要的,但我更喜歡前者作爲一個清潔的解決方案。

有沒有人有其他想法?謝謝。

+0

你只需要傳遞給一個參考處理程序。 – ahren 2013-03-20 01:11:47

回答

3

該事件是自動傳遞:

$(document).on('click', '#happyButton', doStuff); 

function doStuff(event) { 
    console.log(event.target); 
    //event is available 
} 

,它是:

.on(event, selector, handler) 

不是:

.on(selector, event, handler) 

同樣與off()

+0

謝謝!在我回家的路上,它也讓我感到不知所措,因爲我沒有傳遞函數調用(將返回結果),而是函數本身。 – ebiester 2013-03-20 05:36:19

相關問題