Jquery在最后一次按键后2秒运行代码

我正在为网站开发自动搜索function。

它使用ajax来查询api。

在输入3个字符后的那一刻,它将在每次按键时搜索。

我想要的是

情况1:
用户输入tes
2秒通过搜索执行


案例2:
用户输入tes
1秒传球
用户按下t
2秒过去了
搜索是在测试中执行的


情形3:
用户输入tes
1秒钟通过
用户按下t
1.5秒过关
用户按我
1.5秒过关
用户按下
1.5秒过关
用户按g
2秒过去了
在测试中搜索

如您所见,搜索操作仅在按键后两秒钟内没有按键(或粘贴等)时执行。

我的基本想法是。

on keydown调用一个设置超时的函数,该函数还设置一个包含文本框中最后一个条目的变量。 当超时到期时,它会检查框中的值以查看它是否与变量中的值匹配。

如果匹配则没有变化。 搜索也是如此

如果他们不做任何事情,因为后续按键的超时将跟随进行相同的检查。

这是唯一/最好的方法吗?

雷米夏普的以下function可以解决这个问题:

function throttle(f, delay){ var timer = null; return function(){ var context = this, args = arguments; clearTimeout(timer); timer = window.setTimeout(function(){ f.apply(context, args); }, delay || 500); }; } 

在前面的代码中, f是您想要限制的函数, delay是在最后一次调用之后等待的毫秒数(如果省略则默认为500)。 throttle返回一个包装函数,它清除以前调用的任何现有超时,然后设置将来delay毫秒的超时来调用f 。 对返回函数的arguments的引用用于调用f ,确保f接收它期望的参数。

您应该按如下方式使用它:

 $('#search').keyup(throttle(function(){ // do the search if criteria is met })); 

几乎相同,只是在满足条件时才设置定时器: