以下 Javascript 代码适用于除 IE9 以外的所有浏览器。解决方法是什么?
setTimeout('doSomething();clearTimeout();',500);
调试器说它希望我将一个 ID 号传递给 clearTimeout(),而我所做的只是清除所有超时。
以下 Javascript 代码适用于除 IE9 以外的所有浏览器。解决方法是什么?
setTimeout('doSomething();clearTimeout();',500);
调试器说它希望我将一个 ID 号传递给 clearTimeout(),而我所做的只是清除所有超时。
正如其他人所说,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);
希望这有助于澄清事情。