javascript - JavaScript - 自动完成的去抖动/节流功能
问题描述
以下代码是我在用户在搜索框中键入时生成自动完成建议的实现。
当前的去抖时间为 350 毫秒。它工作正常,但有时我注意到自动完成结果滞后,即使在用户完成输入后,新的建议也会出现在搜索建议框中。
目前,文件中的 API 在autosuggest.php
用户停止输入后被调用,就像请求滞后于去抖动时间一样。这不是我想要发生的。
我应该如何优化此功能,以便自动完成建议不会落后,并且在用户完成输入后停止发出 API 请求?
总的来说,我这样做是为了限制对autosuggest.php
文件发出的请求数量,例如,如果用户输入速度非常快。
<script>
function getSuggestions(){
var query = document.getElementsByName("q")[0].value;
$(document).ready(function(){
$("#suggestions").load("https://example.com/autosuggest.php", {
q: query
});
console.log(query); // For testing
});
}
$(document).ready(function(){
let debounce;
$('.searchBox').on('keydown', function(e){
// get keycode of current keypress event
var code = (e.keyCode || e.which);
// do nothing if it's an arrow key
if(code == 37 || code == 38 || code == 39 || code == 40 || code == 13) {
return;
}
// do normal behaviour for any other key
debounce = setTimeout(() => {
getSuggestions();
}, 350);
});
$(".searchBox").click(function(){
getSuggestions();
});
});
</script>
<input class="searchBox" type="text" name="q" placeholder="" value="" onkeydown="getSuggestions()">
<div id="suggestions">
</div>
解决方案
推荐阅读
- networking - 传输数据速率和接收窗口大小
- qt - QML TextInput 忽略 inputMethodHints
- php - 如何使用批处理脚本清除文件内容
- amazon-web-services - 从 Amazon DynamoDB 表中获取项目到 Lambda 函数意图 node.js
- firebase - Unity:如何解决 Firebase.Storage.StorageException?
- azure - 如何从 git repo 部署特定于部署槽的 appsettings?
- php - 在 HTML 中嵌入 PHP
- java - 未选择 jTable 行时如何显示消息?
- python - 如何在 Django 中与 jQuery 进行通信?
- docker - 无法解析 .travis.yml