2014-02-21 71 views
0

我正在實現一個帶有自動建議值的文本框,它從每個按鍵上的mysql數據庫取值。由於我在數據庫中有大量值,因此我的功能需要時間。到一個函數是按順序運行的在按下的每個按鍵上實現自動建議

假設 我按了一個鍵,它觸發一個事件並啓動func的執行。 然後我按下B鍵,這又觸發了一個事件,但現在我想早些時候func應該在運行第二個功能之前被殺死

我該如何做到這一點?

通過我發現線程可以用來實現this.But,但我仍然無法實現即使通過線程。如果有人知道確切的程序?

+0

數據庫調用每個按鍵?讓人驚訝。你不能把這個存儲在內存中嗎? (ps使用[trie](http://en.wikipedia.org/wiki/Trie)或[基數樹](http://en.wikipedia.org/wiki/Radix_tree)) – roippi

+0

不,我的數據庫很大我必須過濾每個按鍵的結果 –

回答

1

這是作爲一個偉大的(在我看來)求職面試問題,和內森萊克萊爾wrote about it on his blog

相關摘錄:

如果我們使用window.setTimeout我們可以推遲呼籲200毫秒。 ......但是,如果用戶的輸入速度很快,甚至只是正常的速度,那麼這不會對我們有所幫助。所以我們需要一種方法來中斷超時,如果用戶繼續打字。

...

所以,我知道,當你調用window.setTimeout,你回來唯一引用超時的ID。如果需要的話,你可以用它來取消超時!所以我們應該只在keypress函數閉包中存儲超時ID,並且如果用戶在超時函數觸發之前再次觸發按鍵事件,我們將取消它並設置一個新的!

最後,他分享了一些代碼示例,我想可以幫助您優化您的功能!

$(document).ready(function() { 
    $('input').keypress(function() { 
    if (this.timeoutId) 
     window.clearTimeout(this.timeoutId); 
    this.timeoutId = window.setTimeout(function() { 
     $.ajax({ 
      // do some stuff 
     }); 
    }, 200); 
    }); 
}); 
相關問題