-2

以下 Javascript 代码适用于除 IE9 以外的所有浏览器。解决方法是什么?

setTimeout('doSomething();clearTimeout();',500);

调试器说它希望我将一个 ID 号传递给 clearTimeout(),而我所做的只是清除所有超时。

4

1 回答 1

6

正如其他人所说,clearTimeout()没有任何争论不会做任何事情。clearTimeout()要求您指定要清除的超时。这适用于所有浏览器。也许只有 IE 报告错误,但它导致了所有问题。

也许你打电话的原因clearTimeout()是你认为setTimeout()需要清除它以防它不断被调用?这是不正确的——setTimeout()导致它的代码在给定的时间之后只被调用一次。

因此,由于您在超时已被触发后试图清除它,所以无论如何都没有什么要清除的。

有一个单独的命令setInterval()会触发重复超时。这需要清除以阻止它一遍又一遍地调用,但通常认为setInterval()无论如何使用它是一个坏主意,所以我不会在这里过多地讨论它。

您应该做的另一件事是避免setInterval使用字符串参数进行调用。只需指定要直接调用的函数即可。

简而言之,您的代码应如下所示:

setTimeout(doSomething,500);

这应该足以让您的示例在所有浏览器中正常工作。

正如我所说,您不需要在您的情况下清除超时,但如果您确实需要在另一个实例中清除它,您将需要setTimeout(或setInterval)返回一个值。这个值是定时器的一个引用对象,这个引用就是你需要传入的clearTimeout

IE:

var timer;
....
timer = setTimeout(doSomething,500);
....
....
//something happened, I need to cancel the timeout:
clearTimeout(timer);

希望这有助于澄清事情。

于 2012-09-14T21:55:20.477 回答