Vol*_*ike -2 javascript settimeout internet-explorer-9
以下Javascript代码适用于除IE9之外的所有浏览器.有什么问题?
setTimeout('doSomething();clearTimeout();',500);
Run Code Online (Sandbox Code Playgroud)
调试器说它希望我将ID号传递给clearTimeout(),当我所做的只是清除所有超时时.
正如其他人所说,clearTimeout()没有任何论据也没有做任何事情.clearTimeout()要求您指定要清除的超时.这适用于所有浏览器.也许只有IE报告错误,但它导致了所有这些错误.
也许你打电话的原因clearTimeout()是你认为setTimeout()需要被清除以防它被不断调用?这是不正确的 - setTimeout()导致其代码在给定的时间之后被调用一次.
因此,既然您已经尝试在触发超时后清除超时,那么无论如何都无法清除.
有一个单独的命令setInterval(),它会触发重复超时.这需要被清除以阻止它一遍又一遍地调用,但setInterval()无论如何通常认为这是一个坏主意,所以我不会在这里过多地讨论它.
您应该做的另一件事是避免setInterval使用字符串参数调用.只需指定要直接调用的函数即可.
简而言之,您的代码应如下所示:
setTimeout(doSomething,500);
Run Code Online (Sandbox Code Playgroud)
这应该足以让您的示例在所有浏览器中正常工作.
正如我所说,你不需要在你的情况下清除超时,但是如果你确实需要在另一个实例中清除它,你需要setTimeout(或setInterval)返回一个值.此值是计时器的参考对象,此参考是您需要传递的内容clearTimeout.
即:
var timer;
....
timer = setTimeout(doSomething,500);
....
....
//something happened, I need to cancel the timeout:
clearTimeout(timer);
Run Code Online (Sandbox Code Playgroud)
希望有助于澄清事情.
| 归档时间: |
|
| 查看次数: |
5318 次 |
| 最近记录: |