gpt4 book ai didi

javascript - 如何延迟 .keyup() 处理程序直到用户停止键入?

转载 作者:行者123 更新时间:2023-11-28 07:57:45 25 4
gpt4 key购买 nike

我有一个搜索字段。现在它会搜索每个按键。因此,如果有人输入“Windows”,它将使用 AJAX 搜索每个按键:“W”、“Wi”、“Win”、“Wind”、“Windo”、“Window”、“Windows”。

我想要有一个延迟,所以它只在用户停止输入 200 毫秒时进行搜索。

keyup函数中没有此选项,我尝试过setTimeout,但没有成功。

我怎样才能做到这一点?

最佳答案

我将这个小函数用于相同的目的,在用户停止输入指定时间后或在高速触发的事件中执行函数,例如resize:

function delay(callback, ms) {
var timer = 0;
return function() {
var context = this, args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
callback.apply(context, args);
}, ms || 0);
};
}


// Example usage:

$('#input').keyup(delay(function (e) {
console.log('Time elapsed!', this.value);
}, 500));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for="input">Try it:
<input id="input" type="text" placeholder="Type something here..."/>
</label>

它是如何工作的:

delay 函数将返回一个内部处理单个计时器的包装函数,在每次执行中,计时器都会按照提供的时间延迟重新启动,如果在此时间过去之前发生多次执行,计时器将只需重置并重新开始。

当计时器最终结束时,回调函数将被执行,传递原始上下文和参数(在本例中为 jQuery 的事件对象,DOM 元素为 this)。

更新2019-05-16

我已经使用 ES5 和 ES6 功能针对现代环境重新实现了该功能:

function delay(fn, ms) {
let timer = 0
return function(...args) {
clearTimeout(timer)
timer = setTimeout(fn.bind(this, ...args), ms || 0)
}
}

实现包含 set of tests .

对于更复杂的东西,请查看 jQuery Typewatch插件。

关于javascript - 如何延迟 .keyup() 处理程序直到用户停止键入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25856114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com