javascript - 超时完成后多次运行去抖功能

标签 javascript

我正在尝试运行一个去抖函数,该函数接受“SaveValue”的输入,该函数将获取输入的值并将其保存在某个位置。问题是它在去抖超时完成后多次运行“SaveValue”函数。我有很多这样的输入,并且真的不想在代码中放置一堆 onEventListeners 。完成这项工作的最佳方法是什么。

<input id="testInput" onkeyup="debounce(() => { SaveValue(value, 'savehere', 'onhere') } , 300)();" type="text" /> 
function debounce(func, wait, immediate) {
    var timeout;
    return function() {
        var context = this, 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);
    };
};
function SaveValue(value1, value2, value3){
    console.log(`Save value of ${value1} here -> ${value2} on field -> ${value3}`);
}

最佳答案

我对您的代码做了一些测试,似乎在 onkeyup 处理程序中调用 debounce 函数的方式正在创建一个新的实例每个事件的函数调用(以及随后的新计时器)。这将导致多次调用。

尝试将其更改为这样的内容:

const dSaveValue = debounce(() => { SaveValue("value", 'savehere', 'onhere')}, 1000, false)

<input id="testInput" onkeyup="dSaveValue()" type="text" />

劳埃德

关于javascript - 超时完成后多次运行去抖功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66150420/

相关文章:

javascript - 在 JavaScript 中显示 2 天之间的实时年、月、周和日

javascript - 尝试仅使用 js 制作备用行#eee 背景

javascript - Material UI TextField 自定义属性

javascript - Angular 状态在单击任意位置之前不会更新

javascript - 使用 JavaScript 在单个函数内将数字数组转换为字符串,然后再转换回数字数组

javascript - 如何将 Ember.js 与 Express.js 集成?

javascript - 计算数字的开始中间和结束

javascript - 对 stackexchange api 的 Http 请求返回不可读的 json

javascript - 如何修复 React-tutorial 的 Sublime 文本突出显示?

javascript - 插入数组的第一个对象