2011-06-20 52 views
8

由於環境的原因,我希望將它限制爲小而簡潔的插件,除非它是一個可以放在其他jQuery代碼中的擴展。jquery - 實時搜索ajax調用用戶類型,但有小的延遲?

我有這樣的代碼:

$("#txtSearch").live('keyup', function() { 
    LoadList(1)  
}); 

我想補充這樣,如果一個用戶必須等待(在停止打字)0.5秒鐘,然後執行一個呼叫延遲。

因此,基本上如果在連續擊鍵之間鍵入的字母少於X時間,就不會發生ajax調用。

有沒有一個簡潔的方式來做到這一點與JQuery的?

回答

9
$("#txtSearch").live('keyup', function() { 
    var value=$("#txtSearch").val(); 
    setTimeout(function(){ 
      if ($("#txtSearch").val() == value) 
      { 
       LoadList(1)  
      } 
    },500); 
}); 
+2

對我來說,它將兩次加載列表,而clearTimeout的下一個回答完美無缺,看起來更乾淨。 – balrok

+0

這確實實際上會觸發該功能兩次,因爲之前的超時未被重置。 – user1226868

3

您可以使用jQueryUI的自動完成小部件,它有一個延遲選項:

一個按鍵後自動完成等待毫秒延遲激活自身。零延遲對本地數據有意義(響應速度更快),但可能對遠程數據產生大量負載,但響應速度較慢。

http://jqueryui.com/demos/autocomplete

+0

哎呀抱歉,我沒有正確閱讀! – Nabab

+0

沒有必要。看看我的答案..而且,OP想要沒有插件,但你注意到它,因爲我看到:D – genesis

+0

其實我應該提到JQuery UI是可用的一個插件:) –

20

應用新前設置超時時間,並且明確它每一次擊鍵:

var timeout; 
$("body").on('keyup', '#txtSearch', function() { 
    window.clearTimeout(timeout); 
    timeout = window.setTimeout(function(){ 
     LoadList(1); 
    },500); 

}); 

例如:http://jsfiddle.net/niklasvh/KgRjJ/

+1

謝謝!我搜索了一段時間,發現沒有什麼有用的,直到這一點。 – Benjamin

+1

根據http://api.jquery.com/live/ - 從jQuery 1.7開始,.live()方法已被棄用。使用.on()附加事件處理程序。老版本的jQuery用戶應優先使用.delegate(),而不要使用.live()。 – Lingnik

+0

@Lingnik正確,我已經相應地更新了我的答案。 – Niklas