2017-02-21 187 views
0

我希望某些代碼在用戶更改輸入字段中的數量時觸發。但用戶使用小小的上下箭頭快速增加和減少數量。就像按下5次來達到5.我不想讓代碼觸發5次。所以我想設置一個計時器。當檢測到更改事件時,它會等待1秒或等待直到更改已停止。然後抓住最新的價值。jquery onchange設置超時

那麼有沒有辦法在短時間內檢測到多個變化,而且什麼也沒有。然後,如果變化發生並且在x達到時間之後不再發生變化。做一點事。

$("#quantity").on('change',function(){ 
    setTimeout(function(){ 
     console.log("fired"); 
    }, 1000); 
}); 

我的代碼只是推遲了解僱。

那麼我們該如何做到這一點。

找到了答案在這裏重複的問題 Jquery change with delay

+0

NVM傢伙發現重複問題的答案在這裏http://stackoverflow.com/questions/9424752/jquery-change-with-delay – codenoob

+0

對不起,直到發佈我的答案後纔看到您的評論。也許這將有助於...... – rasmeister

回答

2

這裏就是我的輸入框,以防止引發頻繁的變化,而用戶鍵入完成:

  var timeoutId = 0;  
     object.dom.input.addEventListener('input',function() { 
      clearTimeout(timeoutId); 
      // do stuff 
      // Fire our onchange event 
       if (this.delayOnChange > 0) { 
        timeoutId = setTimeout(function() { this.onchange() }, this.delayOnChange); 
       } else { 
        this.onchange(); 
       } 
      } 
     },false); 

此檢查,看看我們是否已經設置'delayOnchange',如果我們延遲了'onchange()'事件的觸發。每次改變輸入時我們都會重置計時器(clearTimeout()),所以我們基本上等待用戶在觸發onchange之前停止快速鍵入。

+0

這個作品。我認爲你的長時間打字情況效果更好,因爲只要用戶打字,它就會不斷刷新計時器。另一個問題的答案只是等待1秒。十分鐘後會接受 – codenoob

+0

無論如何,第二個肯定是太長時間了。我發現任何超過1/2秒的東西都會讓使用者感到不舒服。這樣做的好處是,您可以根據情況設置不同的延遲。如果他們點擊向上/向下箭頭,則可能會縮短大概300毫秒的時間。當然,這也取決於被解僱的事件是什麼以及如何影響用戶體驗。 – rasmeister