一个JavaScript函数,执行另一个函数时有延迟

一个JavaScript函数,执行另一个函数时有延迟,javascript,settimeout,Javascript,Settimeout,我看到了下面的代码片段,它在每次用户更改后验证输入字段,但在实际开始验证之前,它会等待1到5秒的用户不活动: var timer; var inputElement = document.getElementById("nameInput"); inputElement.oninput = function() { delayedInputValidation(validateInput, 1500); }; function delayedInputValidation(func,

我看到了下面的代码片段,它在每次用户更改后验证输入字段,但在实际开始验证之前,它会等待1到5秒的用户不活动:

var timer;

var inputElement = document.getElementById("nameInput");
inputElement.oninput = function()
{
    delayedInputValidation(validateInput, 1500);
};

function delayedInputValidation(func, delayInMilliseconds)
{
    clearTimeout(timer);

    timer = setTimeout(func, delayInMilliseconds);
}

function validateInput()
{
    ... //stuff here
}
我的问题不是关于输入验证,而是关于超时机制。我试图推广延迟函数,使其适用于任意函数:

function delayedFunction(timer, func,delayInMilliseconds)
{
    clearTimeout(timer);

    timer = setTimeout(func, delayInMilliseconds);
}
关键是JavaScript中有几个计时器,例如:

var inputTimer;
var otherTimer;
...
如果您传递相同的计时器,延迟功能将清除(重置)正确的计时器,然后使用setTimeout功能再次设置

但是,这不起作用,因为timer对象通过value way()在引用中传递,导致局部变量timer被更改,而不是实际的inputTimer


如何修复此方法

您可以使用

var定时器={};
函数delayedFunction(计时器、函数、延迟毫秒){
clearTimeout(计时器[计时器]);
定时器[定时器]=设置超时(func,delayin毫秒);
}
delayedFunction('inputTimer',func1,delay1);
delayedFunction('otherTimer',func2,delay2);
或者像这样:

var timers = [],
    inputTimer = 0,
    otherTimer = 1;
function delayedFunction(timer, func, delayInMilliseconds) {
    clearTimeout(timers[timer]);
    timers[timer] = setTimeout(func, delayInMilliseconds);
}
delayedFunction(inputTimer, func1, delay1);
delayedFunction(otherTimer, func2, delay2);