JavaScript-使用去抖动和节流优化自动完成
我有下面的文本框和“自动完成”功能。在文本框中输入每个字符后,它应该有一个350毫秒的去抖动,但它不起作用 在JSFiddle中自己尝试一下。正如您在控制台中所看到的,控制台正在记录键入的每个字符,而无需等待解块时间 我应该怎么做才能使此功能按预期工作?我希望有一个350毫秒的去盎司时间,以防止每个字符被记录。。。只需每350毫秒更新一次输出 以下是JSFIDLE:JavaScript-使用去抖动和节流优化自动完成,javascript,html,jquery,throttling,debounce,Javascript,Html,Jquery,Throttling,Debounce,我有下面的文本框和“自动完成”功能。在文本框中输入每个字符后,它应该有一个350毫秒的去抖动,但它不起作用 在JSFiddle中自己尝试一下。正如您在控制台中所看到的,控制台正在记录键入的每个字符,而无需等待解块时间 我应该怎么做才能使此功能按预期工作?我希望有一个350毫秒的去盎司时间,以防止每个字符被记录。。。只需每350毫秒更新一次输出 以下是JSFIDLE: $(文档).ready(函数(){ 让我们去抖; $('.searchBox')。on('keydown',函数(e){ //获
$(文档).ready(函数(){
让我们去抖;
$('.searchBox')。on('keydown',函数(e){
//获取当前按键事件的按键代码
var代码=(e.keyCode | | e.which);
//如果是箭头键或回车键,请不要执行任何操作
如果(代码==37 | |代码==38 | |代码==39 | |代码==40 | |代码==13){
返回;
}
//对任何其他键执行正常行为
去盎司=设置超时(()=>{
getAutocomplete();
}, 350);
});
});
函数getAutocomplete(){
log($('.searchBox').val());
}
在设置另一个超时之前,请清除现有超时
$(文档).ready(函数(){
让我们去抖;
$('.searchBox')。on('keydown',函数(e){
//获取当前按键事件的按键代码
var代码=(e.keyCode | | e.which);
//如果是箭头键或回车键,请不要执行任何操作
如果(代码==37 | |代码==38 | |代码==39 | |代码==40 | |代码==13){
返回;
}
//对任何其他键执行正常行为
清除超时(去盎司);
去盎司=设置超时(()=>{
getAutocomplete();
}, 350);
});
});
函数getAutocomplete(){
log($('.searchBox').val());
}
您似乎忘记清除超时。如果不清除,你所做的只是将结果延迟350毫秒,而不是减少结果发生的次数。去抖动不起作用,这正是我试图修复的。控制台在应该跳过时记录每个字符,并每350毫秒记录文本框的输入,而不是每个字符。Kevin,如何清除超时?这正是我需要解决的问题,谢谢!在您的TimeOutput之前添加clearTimeout(去盎司)
。请注意,这是去盎司,不是油门。结果是,在350毫秒内没有事件发生之前,它不会执行该操作。如果你想要一个油门,逻辑是有点不同的。