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

标签 jquery timer keyevent

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

它使用ajax来查询api。

输入 3 个字符后,每次按键都会进行搜索。

我想要的是

Case1:
User enters tes
2 seconds pass search performed


Case2:
User enters tes
1 second pass
user presses t
2 seconds pass
search is performed on test

Case3:
User enters tes
1 second passes
user presses t
1.5 seconds pass
user presses i
1.5 seconds pass
user presses n
1.5 seconds pass
user presses g
2 seconds pass
search in performed on testing

如你所见, 仅当按键后两秒内没有按键(或粘贴等)时才会执行搜索操作。

我的基本想法是。

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

如果它们匹配,则没有变化。 所以进行搜索

如果他们不这样做,那么什么都不做,因为随后的按键超时将进行相同的检查。

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

最佳答案

以下函数来自 Remy Sharp就可以了:

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 返回一个包装函数,该函数清除先前调用中的任何现有超时,然后设置 future delay 毫秒的超时以调用 f。对返回函数的参数的引用用于调用f,确保f接收到它所期望的参数。

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

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

关于Jquery 在最后一次按键后 2 秒运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4364729/

相关文章:

javascript - 使用 jQuery 验证电子邮件

ios - 在后台跟踪时间以处理位置更新

java - 如何在 OSX 上拖放期间检测 META 按键

java - JTable 捕获关键事件?

javascript - 如何预测 DOM keydown 是否会导致字符输入

.net - 从 Javascript 调用 Web 服务时,子域是否参与跨浏览器限制?

jquery - 加载页面时从右到左动画 3 个 DIV。

c# - 多文件问题

c# - 重置 System.Timers.Timer 以防止 Elapsed 事件

java - 在 Java 中准确调度任务运行