Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我该如何预防;参数非可选“;在IE9中使用Javascript clearTimeout()时出错?_Javascript_Internet Explorer 9_Settimeout - Fatal编程技术网

我该如何预防;参数非可选“;在IE9中使用Javascript clearTimeout()时出错?

我该如何预防;参数非可选“;在IE9中使用Javascript clearTimeout()时出错?,javascript,internet-explorer-9,settimeout,Javascript,Internet Explorer 9,Settimeout,以下Javascript代码适用于除IE9之外的所有浏览器。有什么办法 setTimeout('doSomething();clearTimeout();',500); 调试器说它希望我向clearTimeout()传递一个ID号,而我所做的只是清除所有超时。正如其他人所说,clearTimeout()没有任何参数是没有任何作用的清除超时()要求您指定要清除的超时。这适用于所有浏览器。也许只有IE在报告错误,但这在所有的IE中都造成了问题 您调用clearTimeout()的原因可能是您认为需

以下Javascript代码适用于除IE9之外的所有浏览器。有什么办法

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

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

正如其他人所说,
clearTimeout()
没有任何参数是没有任何作用的<代码>清除超时()要求您指定要清除的超时。这适用于所有浏览器。也许只有IE在报告错误,但这在所有的IE中都造成了问题

您调用
clearTimeout()
的原因可能是您认为需要清除
setTimeout()
,以防不断调用它?这是不正确的--
setTimeout()
导致在给定的时间量之后只调用其代码一次

因此,由于您试图在超时被触发后清除超时,因此没有什么可清除的

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

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

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

setTimeout(doSomething,500);
这应该足以让您的示例在所有浏览器中正常工作

正如我所说,您不需要在本例中清除超时,但如果您在另一个实例中确实需要清除超时,则需要让
setTimeout
(或
setInterval
)返回一个值。此值是计时器的引用对象,此引用是您需要传递到
clearTimeout
中的内容

即:


希望这有助于澄清问题。

将字符串传递给setTimeout是一种不好的做法。而是传递一个函数。好吧,尝试清除已经超时的超时确实没有多大意义。为什么需要清除超时呢?一旦它已经运行,clearTimeout就没有意义了。在这种情况下,我会将所有超时推送到一个数组,然后在
for
循环中清除它们。
clearTimeout()
没有参数不会清除所有超时。它在所有浏览器中都不起任何作用;MDN将其记录为,不带参数运行与带
未定义的
参数运行相同,这是一个无效的超时ID。测试用例:
setTimeout(function(){console.log('timeout')},1000);clearTimeout()Chrome仍然会记录“超时”消息。它会清除此消息。我已经习惯了使用它,从以前的一个程序员那里借来的,他一定把这件事搞砸了。我不会再这样做了。
var timer;
....
timer = setTimeout(doSomething,500);
....
....
//something happened, I need to cancel the timeout:
clearTimeout(timer);