我在打字的时候找到了这个答案,我以为我还是会发帖子以防万一
我相信没有人能够重现这一点,但是到底是什么。 :)
我们有一个页面在一些用户输入后触发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.
}
就像我说的,这通常很好。但是当它停止工作时,“问题”似乎是对变量c
的赋值。
这是IE调试控制台的一个片段。如果我将setTimeout
的结果分配给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
答案 0 :(得分:0)
页面中的其他内容也决定使用'c'变量来存储计时器ID。其他代码在新的setTimeout有机会触发之前清除它。更改为使用不同的变量(并使其名称在您使用时更具描述性)。