javascript - 去抖动功能不适用于输入事件
问题描述
我从 David Walsh 博客中获取了 debounce 函数实现。这是它的正文:
function debounce(func, wait, immediate) {
var timeout;
return function executedFunction() {
var context = this;
var args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
现在我在 html 输入元素中使用这个 debounce 函数,如下所示:
<input type="text" id="conversation_filter_recent_messages" oninput="debounce(Conversation.recentMessagesFilter,1000)" class="form-control" placeholder="Filter Conversations">
但是当我在那个 HTML 输入元素上按下键时,什么也没有发生。应用断点表明代码永远不会返回名为 executeFunction 的函数。
PS:Conversation.recentMessagesFilter 是我的函数,应该在 1 秒后运行,并在其他文件中定义。
解决方案
tkasul 是对的,您应该使用 debounce 一次来创建 debounced 函数并将其添加到输入中。
但是,要使您的代码正常工作,您可以这样做debounce(Conversation.recentMessagesFilter.bind(this),1000)()
所以
<input type="text" id="conversation_filter_recent_messages" oninput="debounce(Conversation.recentMessagesFilter.bind(this),1000)()" class="form-control" placeholder="Filter Conversations">
绑定是为了this
表示recentMessagesFilter 中的输入字段,但是,您可以将其值传递给函数,如下所示:
debounce(Conversation.recentMessagesFilter,1000)(this.value)
推荐阅读
- ruby-on-rails - 无法使用 rspec 为 rails-api 应用程序设计登录 rwrite 请求规范
- neural-network - Pytorch 中的错误:libcudart.so.10.2:无法打开共享对象文件:没有这样的文件或目录
- c++ - 如何将文档状态逐个字母地保存到 Scintilla 上的 UNDO 和 REDO?
- tensorflow - 在 TFRecord 中保存具有可变长度的元组或列表或一维数组特征
- python - Pygame player 2 没有更新其状态
- java - 如何让 FeignClient 处理参数中的自定义 id 字段?
- c - MinGW / SWIG 构建的 python 扩展无法在 Anaconda 命令终端中加载
- matlab - 在matlab中保存aoctool图形
- python - 如何使用scrapy管道直接将抓取的图像保存到数据库?
- postgresql - docker-compose postgres 致命角色和 db 不存在错误