0

我在打字时找到了答案,以为我仍然会发布它以防万一它对某人有所帮助

我敢肯定没有人能够重现这一点,但到底是什么。:)

我们有一个页面会在一些用户输入后触发 AJAX 调用。在一些用户输入之后,我们使用 setTimeout 稍等片刻,以避免在用户完成输入之前调用 AJAX 方法。没有什么花哨。但是每隔一段时间 setTimeout 就会拒绝触发。

代码基本上如下所示:

var c = -1;
function userInput(input)
{
    clearTimeout(c);
    c = setTimeout(function(){load(input);}, 100);
}
function load(input)
{
    console.log("load: " + input);
    // ajax stuff.
}

就像我说的,这通常工作得很好。但是当它停止工作时,“问题”似乎是对 variable 的赋值c

这是来自 IE 调试控制台的片段。如果我将结果分配给setTimeoutto c,则不会触发。如果我将结果分配给其他东西,或者根本不分配它,它工作正常。

>> c = setTimeout("load('test');", 100); 
303789 
>> setTimeout(function(){load('test');}, 100); 
311016 
LOG: load: test
>> clearTimeout(c) 
>> c = setTimeout(function(){load('test');}, 100); 
342177 
>> testtesttest = setTimeout(function(){load('test');}, 100); 
346296 
LOG: load: test 
4

1 回答 1

0

您页面中的其他内容也决定使用“c”变量来存储计时器 ID。在您的新 setTimeout 有机会触发之前,其他代码正在清除它。更改为使用不同的变量(并使其名称在您使用时更具描述性)。

于 2013-02-13T20:53:59.987 回答