0

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

更新完成后,我需要执行序列化函数。

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

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

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

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

有想法该怎么解决这个吗?

谢谢!

4

1 回答 1

2

我也认为问题出在其他地方: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)
于 2012-11-26T12:21:32.733 回答