2011-07-29 16 views
2
  • 我有用於過濾和排序選擇下拉的內容的輸入的文本。
  • 過濾/選擇功能filterSort()上調用keyup上輸入文本。

代碼如何在後續事件同時調用同一個處理程序時停止執行當前事件處理程序線程?

$(inputTextField).keyup(function() 
{ 
    //lot of logic to filter the options of a select dropdown and sort them based on the text of inputTextField 


}); 

問題
過濾/排序邏輯現在工作的罰款。但我意識到,當用戶輸入內容時,有多個線程在filterSort()內執行代碼。所以,我想停止keyup()如果另一個keyup()發生內部的代碼執行,因爲沒有必要繼續使用舊線程作爲它的結果將被丟棄反正。從未遇到過這種情況。我該怎麼做呢?

我還不知道這是在功能上造成任何問題,我想我得到最終的正確過濾+排序的結果。

+0

您是否打算中斷已觸發的事件? –

+0

是...當一個新的鍵入命令被觸發時,停止執行已經觸發的鍵入事件。請注意,後者的密碼必須完全執行,除非另一個密碼不會在稍後發生。 –

+0

我認爲這不可能,可能是更好的事件隊列使用一次() –

回答

1

的溶液將與setTimeout()延遲濾波操作和每次用戶按下一個鍵時重置計時器。 jQuery的data()方法可用於跟蹤計時器標識符:

$(inputTextField).keyup(function() { 
    var $this = $(this); 
    var timer = $this.data("timer"); 
    if (timer) { 
     window.clearTimeout(timer); 
    } 
    $this.data("timer", window.setTimeout(function() { 
     // Lots of logic to filter and sort the options... 
    }, 250)); 
}); 
+0

看起來很大......非常感謝......現在嘗試做。 –