Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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
在Internet Explorer中执行两次JavaScript/jQuery间隔_Javascript_Jquery_Internet Explorer_Internet Explorer 9_Setinterval - Fatal编程技术网

在Internet Explorer中执行两次JavaScript/jQuery间隔

在Internet Explorer中执行两次JavaScript/jQuery间隔,javascript,jquery,internet-explorer,internet-explorer-9,setinterval,Javascript,Jquery,Internet Explorer,Internet Explorer 9,Setinterval,我在jQuery中创建了一个小的fadeIn/fadeOut旋转木马,目前为止,它在我测试过的所有符合标准的浏览器中都运行良好;除了Internet Explorer 9 使用setInterval将旋转木马设置为每15000毫秒滚动到下一个项目,它还使用窗口。addEventListener在聚焦到窗口外时将其暂停 当我在InternetExplorer9中测试它时,我注意到每个间隔每次执行两次,因此它不是切换到下一个项目然后等待15秒(就像在其他浏览器中发生的那样),而是在等待下一个间隔之前

我在jQuery中创建了一个小的fadeIn/fadeOut旋转木马,目前为止,它在我测试过的所有符合标准的浏览器中都运行良好;除了Internet Explorer 9

使用
setInterval
将旋转木马设置为每15000毫秒滚动到下一个项目,它还使用
窗口。addEventListener
在聚焦到窗口外时将其暂停

当我在InternetExplorer9中测试它时,我注意到每个间隔每次执行两次,因此它不是切换到下一个项目然后等待15秒(就像在其他浏览器中发生的那样),而是在等待下一个间隔之前滚动两个项目

代码可能太长,无法发布,但页面本身位于,JavaScript文件位于


我该怎么做才能使它在IE9中正常工作?在将JavaScript应用于IE时,有什么我应该避免的吗?

我猜当一切都启动时,您的焦点侦听器会被调用。在启动计时器之前,您可以尝试检查您是否有
carouselIntervalId

if(!carouselIntervalId)
    carouselIntervalId = setInterval(...);
既然我们在这里都是偏执狂,那么把这个检查放在两个调用之前

然后,当您停止计时器时,您可能希望将carouselIntervalId设置为null:

if(carouselIntervalId)
    clearInterval(carouselIntervalId);
carouselIntervalId = null;
当然,您需要以上所有
clearInterval
调用

另外,当我引起您的注意(?)时,我注意到您有两个不同的
setInterval
调用:

setInterval(function() { carouselNext() }, 15000);
// And later...
setInterval(function() { if (animate == true) { carouselNext() } }, 15000);

您可能希望使它们相同,以避免混淆和bug。

在Firefox 5.01中也是如此。我可以在IE调试器中验证代码是否在启动时设置了两个间隔计时器——一个在初始化中,另一个在初始焦点事件中。正如mu所说,如果已经有一个间隔在运行,那么修复程序将不会设置新的间隔。@jfriend00:谢谢,我不想拖出我的IE测试设备。检查
carouselIntervalId
似乎已经做到了这一点。不知何故,我的脑海里一直在想,为
carouselIntervalId
设置一个新的值只会删除旧的间隔,并用新的间隔替换它。