2013-01-23 26 views
1

所以,我有這個小功能:如何點擊後追加的數據只有一次使用jQuery

carousel_controls_buttons.live('click', function(e){ 
    setTimeout(function(){ 
     info_board_span.append(info_board_description); 
     e.preventDefault(); 
    }, 450); 
}); 

我想要做的是停止追加info_board_description兩個以上後的一個時間,三個快速點擊。當我這樣做時,此數據會附加多次,並且我有內容重複。我怎麼能阻止這一段時間,f.e.這450ms? Thx尋求幫助。

+0

已閱讀[使用.one()與.live()jQuery](http://stackoverflow.com/questions/3796207/using-one-with-live-jquery) –

回答

2

可以使用clearTimeout功能:

var t = ''; 
carousel_controls_buttons.live('click', function(e){ 
    clearTimeout(t); 
    t = setTimeout(function(){ 
      info_board_span.append(info_board_description); 
      e.preventDefault(); 
    }, 450); 
}); 

例如:http://jsfiddle.net/xhSvC/

注意live方法已經過時,應使用on方法來代替。

+0

這個作品完美,thx男人,我有soma ajax內容加載後,每次點擊,這是唯一正確的方法:) thx – Lukas

+0

+1的意見,當然我不知道 –

+0

:)他應得的 – Lukas

0

把計數放在那裏say var count = 0;點擊時增加並檢查條件如果count == 1附加它,如果不離開它

3

使用布爾值來控制它。

var flag = true; 
carousel_controls_buttons.live('click', function(e){ 
    e.preventDefault(); 
    if (flag) { 
     setTimeout(function(){ 
      info_board_span.append(info_board_description); 
      flag = true; 
     }, 450); 
     flag = false; 
    } 
}); 
+0

我有ajax內容加載後每次點擊,我需要逐一追加這些內容,但有一次,等待一段時間,並追加另一個,所以這不是一個好方法BC這是停止所有我的AJAX行動後一個附加 – Lukas

0

有一個事件做到這一點:

carousel_controls_buttons.one('click', function() { 
    setTimeout(function(){ 
     info_board_span.append(info_board_description); 
     e.preventDefault(); 
    }, 450); 
}); 
1

而其他的答案應該工作,我想向您介紹的debounce & throttle概念。

http://benalman.com/projects/jquery-throttle-debounce-plugin/是一個插件,您可以使用它來實現您需要的功能,即確保函數每x秒只執行一次。

油門與反跳

兩個限制和消除抖動會限速一個 功能的執行,但是對於給定的情況下是合適的?

好了,簡單地說:當節流限制了 功能的不超過一次延遲毫秒的執行,去抖動 保證該函數將永遠只能執行單一的時間 (給指定的門限) 。

carousel_controls_buttons.live('click', function(e) { 
    $.debounce(450, function() { 
     info_board_span.append(info_board_description); 
     e.preventDefault(); 
    }); 
}); 
+0

THX,我會測試它很快 – Lukas