javascript - Debounce 功能在 keyup 时立即触发,而是必须在一秒钟后触发
问题描述
我正在尝试实现自定义去抖动功能,该功能必须在一秒钟延迟后(在用户停止输入后)提醒用户在文本框中输入的任何数据。我究竟做错了什么?它立即用单个字符触发 alert()。
function debounce(func, timeout) {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, args);
}, timeout);
};
}
function saveInput(args) {
alert(args); //This triggers immediately
}
const processChange = (event) => {
debounce(saveInput(event.target.value), 1000);
}
<input type="text" onkeyup="processChange(event)" />
你们能建议我在这里错过什么吗?
解决方案
这对我有用。但是 myInput 在这里是一个全局变量。
function debounce(callback, delay) {
let timeout;
return function () {
clearTimeout(timeout);
timeout = setTimeout(callback, delay);
}
}
const myInput = document.getElementById("myInput");
function helloInput() {
alert(myInput.value);
}
myInput.addEventListener(
"keyup",
debounce(helloInput, 1000)
);
myInput.focus();
<input type="text" id="myInput" />
推荐阅读
- google-bigquery - BigQuery + Google Analytics 数据:为什么按照 Schema 将 totals.TransactionRevenue 乘以 10 ^ 6...?
- javascript - 导入 Yup 验证时表单提交不起作用
- java - 如何实现随机敌人生成 libgdx
- php - 使用 AJAX 上传 Symfony 文件不起作用
- android - Google Map Places Api 错误:状态码 9011 | 安卓
- c# - Url.Page 突然开始省略顶级域
- wordpress - 视频播放器 wpbakery 模块不显示视频
- java - Spring Security Oauth2 客户端获取访问令牌失败,请求代码无效=415,消息=不支持的媒体类型
- javascript - 用JS改变不同颜色的body背景
- php - Symfony 5 - 处理查询异常的最佳实践