仅在超时的最后一次调用后运行一次函数

时间:2012-11-26 12:08:34

标签: javascript jquery

我正在使用一组在一组元素上运行的函数来更新每个元素。

我需要在更新完成后执行序列化功能。

目前序列化运行次数太多(元素数量), 我只希望它运行一次。

我尝试声明一个计时器变量,每次都禁用它,但最后一次:

    clearTimeout(timer); 
    timer = setTimeout(function(){console.log("tester")}, 5000);
    return this;

但这似乎不起作用,当功能超时时,它会多次运行。

有关如何解决此问题的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

我也认为问题出在其他地方:setTimeout只能通过声明执行一次,所以如果它多次触发,那只能是因为它被声明了很多次。

你能检查一下你是否运行父函数的次数超过了吗?要取消调试,请为每个函数设置console.log()的计数器。返回树中的3/4级别,检查它们是否都不计算两次或更多次。

将事件附加方法从任何内容修改为jQuery on或bind也可以是帮助器。

编辑:严格回答你的问题:

var counter = 0; //should be out of your function scope

setTimeout(function(){
     counter +=1;
     if (counter == 1){
     //yourFunction()
}
},5000)