使用ajax和按键优化search

我有以下代码,因为我想要search数据库,因为用户正在input文本框。 下面的代码工作正常,但似乎有点低效,因为如果用户input速度非常快,我可能会做更多的search,而不是必要的。 所以如果用户input“航行”

我正在寻找“帆”,“赛丽”,“赛琳”和“帆船”

我想看看是否有办法检测按键之间的任何特定时间,所以只有search用户停止键入500毫秒或类似的东西。

有没有像这样的最佳做法?

$('#searchString').keypress(function(e) { if (e.keyCode == 13) { var url = '/Tracker/Search/' + $("#searchString").val(); $.get(url, function(data) { $('div#results').html(data); $('#results').show(); }); } else { var existingString = $("#searchString").val(); if (existingString.length > 2) { var url = '/Tracker/Search/' + existingString; $.get(url, function(data) { $('div#results').html(data); $('#results').show(); }); } } 

你可以做这样的事情:

 $('#searchString').keyup(function(e) { clearTimeout($.data(this, 'timer')); if (e.keyCode == 13) search(true); else $(this).data('timer', setTimeout(search, 500)); }); function search(force) { var existingString = $("#searchString").val(); if (!force && existingString.length < 3) return; //wasn't enter, not > 2 char $.get('/Tracker/Search/' + existingString, function(data) { $('div#results').html(data); $('#results').show(); }); } 

这样做是通过在#searchString元素的.data()集合上存储一个定时器,在500ms之后执行search(在keyup ,比keypress更好.data() 。 每一个keyup清除该计时器,如果键被input,立即进行search,如果没有设置自动search前的另一个500ms超时。

看到这个老问题:

在执行search之前,如何让我的实时jQuerysearch等待一秒?

我会做的是每个按键使用setTimeout函数与所需的延迟。 所以那个函数会在超时后触发。 每按一下键,然后删除定时器,并设置一个新的clearTimeout();

查看这里的一些例子,滚动浏览所有的广告。

http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/