Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-使用去抖动和节流优化自动完成_Javascript_Html_Jquery_Throttling_Debounce - Fatal编程技术网

JavaScript-使用去抖动和节流优化自动完成

JavaScript-使用去抖动和节流优化自动完成,javascript,html,jquery,throttling,debounce,Javascript,Html,Jquery,Throttling,Debounce,我有下面的文本框和“自动完成”功能。在文本框中输入每个字符后,它应该有一个350毫秒的去抖动,但它不起作用 在JSFiddle中自己尝试一下。正如您在控制台中所看到的,控制台正在记录键入的每个字符,而无需等待解块时间 我应该怎么做才能使此功能按预期工作?我希望有一个350毫秒的去盎司时间,以防止每个字符被记录。。。只需每350毫秒更新一次输出 以下是JSFIDLE: $(文档).ready(函数(){ 让我们去抖; $('.searchBox')。on('keydown',函数(e){ //获

我有下面的文本框和“自动完成”功能。在文本框中输入每个字符后,它应该有一个350毫秒的去抖动,但它不起作用

在JSFiddle中自己尝试一下。正如您在控制台中所看到的,控制台正在记录键入的每个字符,而无需等待解块时间

我应该怎么做才能使此功能按预期工作?我希望有一个350毫秒的去盎司时间,以防止每个字符被记录。。。只需每350毫秒更新一次输出

以下是JSFIDLE:

$(文档).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毫秒内没有事件发生之前,它不会执行该操作。如果你想要一个油门,逻辑是有点不同的。