2014-05-07 95 views
1

內這是我想要做什麼:按鈕檢查按鈕被點擊時

  1. 用戶點擊,運行功能A
  2. 如果按鈕還沒有再次被點擊在1秒內,運行功能B
  3. 如果按鈕被點擊,重複(再次運行函數A和檢查福nction B)

這是我已經試過

var clicked = false; 

$('#button').click(function(){ 
    A(); 
}); 

function A(){ 
    clicked = true; 
    setTimeout(function(){ 
     clicked == false; 
    )}, 1000); 

    setTimeout(function(){ 
     if (clicked == false) { 
      B(); 
     } 
    )}, 1000); 
} 

我覺得代碼的情況下和,但我怎麼能得到它的工作太?

編輯:剛剛看到一個相關的SO question張貼後,我沒有通過搜索找到。請稍候,我檢查它是否重複

+0

重複哪些檢查? –

+1

你只是想防止雙擊? –

+0

'重複場景1'是什麼意思? – collapsar

回答

2

我認爲你正在尋找油門(緩衝)的點擊次數,也就是說,您希望在行動之前等待指定的時間,如果在您的限制期內再次發生相同的事件,則重新開始等待。 http://jsfiddle.net/8QdLV/

function B() { 
    console.log('Clicked') 
} 
var timeoutId; 
$('#button').click(function() { 
    clearTimeout(timeoutId); 
    timeOutId = setTimeout(B, 1000); 
}); 

這可以概括http://jsfiddle.net/8QdLV/

function throttle(handler, buffer) { 
    var timeoutId; 
    buffer = buffer || 1000; 
    return function(e) { 
     clearTimeout(timeoutId); 
     var me = this; 
     timeoutId = setTimeout(function() { 
      handler.call(me, e); 
     }, buffer); 
    } 
} 

$('button').click(throttle(function() { 
    console.log('Throttled click'); 
}); 

順便說一句,你可能需要使用https://code.google.com/p/jquery-debounce/這也提供了一個$.throttle功能

+0

爲什麼重新啓動?只要用戶不斷點擊,這將永久地延遲調用「B」。可能不是他想做的事。 –

+0

@cookiemonster這是一個選項,OP可以自由更改代碼而不重新啓動它。但是,我認爲OP在他們執行處理程序之前確實要等待,直到他們沒有被點擊垃圾信息一秒鐘。 –

+0

可能。只是如果你在第一次點擊時這樣做,用戶可能會想知道爲什麼沒有發生,並保持點擊而不打算髮送垃圾郵件。我認爲至少第一次點擊需要被允許。否則,這只是一個糟糕的用戶體驗。 –

0

使用setInterval函數。

請注意,用布爾值記錄點擊是不夠的,否則在t=0,t=0.99處的兩次點擊都將被t=1的重置操作清除。

var clicked = false 
    , hnd_reset = null 
    , hnd_check = null; 

$('#button').click(function() { 
    A(); 
}); 

function A(){ 
    clicked = true; 
    hnd_reset = setTimeout(function(){ 
     clicked = false; 
     hnd_reset = null; 
    )}, 1000); 

    if (hnd_check === null) { 
     hnd_check = setInterval(function(){ 
      if (!clicked && (hnd_reset === null)) { 
       clearInterval(hnd_check); 
       hnd_check = null; 
       B(); 
      } 
     )}, 1000); 
    } 
} 

另外,您可以跟蹤點擊的數量從0開始一個int,允許的B執行且僅當跟蹤爲0