2012-12-10 81 views
1

我的問題,我想debounce函數調用,但與函數的調用範圍有關。油門功能和事件委託

在我的示例中,我查找了事件委託點擊並消除了點擊次數。

這個工作,但debouncing不是元素特定的!

http://jsbin.com/itapuf/2/edit

是否有一個優雅的方式?


編輯: 更具體的(我的英語不是最好的)

我想將這段代碼:

$('#blue').on('click',function(id){ 
    addBeep('trigger'); 
}.throttle(300)); 

$('#green').on('click',function(id){ 
    addBeep('trigger'); 
}.throttle(300)); 

通過這個(事件委託):

$('#btns').on('click','button', function(id){ 
    addBeep('trigger'); 
}.throttle(300)); 

但是,如果我這樣做,最新點擊特定元素可能會丟失。

我需要這樣的東西:

$('#btns').on('click','button', function(id){ 
    addBeep('trigger'); 
}.throttle(300, {bindToScopt:true})); 

但如何改變油門功能這樣的工作?

還是有這個問題的更好的解決方案?

+1

完整後能介紹一個庫?我建議underscorejs。它有一個debouncer和其他有用的函數委託包裝。 –

+0

呃,那會很複雜。你爲什麼需要事件代表團?我真的推薦使用不同的功能,但將它們設置爲循環或其他。 – Bergi

+0

好吧,我有一個解決方案! 如果範圍更改,則立即觸發該功能。 http://q1-code.info.shwups-cms.ch/de/libraries/q1/debounce-throttle-functions/? –

回答

0

我猜,你可能要添加以下在適當的地方

e.stopPropagation() 

這將停止冒泡階段所有的事件的傳播。對於一個完整的跨瀏覽器的體驗做

function doSomething(e) { 
    if (!e) var e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 

請務必閱讀有關Event Handling at quirksmode.org