在Javascript/jQuery中重新启动setInterval()(不带clearInterval)

在Javascript/jQuery中重新启动setInterval()(不带clearInterval),javascript,jquery,timer,setinterval,eventtrigger,Javascript,Jquery,Timer,Setinterval,Eventtrigger,我正在使用jQuery构建ui选项卡。除了一个问题之外,所有的东西都能正常工作——我做了一个setInterval,它运行一个触发(“click”)的函数,以便在5000毫秒后进入下一个选项卡。它在每个选项卡中运行良好,问题是如果用户手动单击选项卡,setInterval的计时器不会在0处重新启动。例如,如果用户在0毫秒时启动tab1,在2000毫秒时单击tab2,则setInterval不会返回到0,它将在2000毫秒时启动,运行到5000毫秒,然后转到tab3。我理解为什么会发生这种情况,我

我正在使用jQuery构建ui选项卡。除了一个问题之外,所有的东西都能正常工作——我做了一个setInterval,它运行一个触发(“click”)的函数,以便在5000毫秒后进入下一个选项卡。它在每个选项卡中运行良好,问题是如果用户手动单击选项卡,setInterval的计时器不会在0处重新启动。例如,如果用户在0毫秒时启动tab1,在2000毫秒时单击tab2,则setInterval不会返回到0,它将在2000毫秒时启动,运行到5000毫秒,然后转到tab3。我理解为什么会发生这种情况,我只是想知道是否有一种方法可以在不必执行clearInterval()和创建全新的setInterval()的情况下重新启动setInterval计时。如有任何见解,将不胜感激

更新

感谢您的回复-我之所以试图避免使用clearInterval,是因为我遇到了如何以clearInterval完全停止setInterval的方式编写代码的问题。该代码设置为在用户单击选项卡时进行跟踪。问题是自动更改函数利用了触发器('click'),因此它在选项卡自动更改时也会运行我编写的clearInterval函数。它本身似乎运行得很好,但一旦用户开始单击选项卡,setInterval的行为就会异常,无法预测地切换选项卡。我怀疑正在发生的事情是几个设置间隔同时运行。。。下面是代码(如果您还没有猜到的话,我对javascript/jquery相当陌生)。我已经注释掉了一些部分,这样它就可以正常工作了,但它仍然不能按照我的预期工作(从第一篇文章开始)


否,如果不清除计时器,则无法重新启动由
setInterval
设置的计时器

您不能真正改变间隔或超时,只能清除它们。也就是说,创建一个清除时间间隔的函数,然后立即使用新的时间值启动一个新的但相同的函数应该很简单

var intervalID;
var resetTimer = function() {
  if (intervalID) { clearInterval(intervalID) };
  intervalID = setInterval(function() {
    console.log('doing stuff!');
  }, 5000);
};

我知道这篇文章已经有两年多的历史了,但我刚刚遇到了一个类似的问题,我找到了一个解决办法

我正在写一个图像滚动条,在设定的时间后会自动切换到下一个图像,每当我点击导航按钮时,转换都会移动两倍

以下是我的解决方案:

将间隔变量(
timer
在您的示例中)设置为全局变量

i、 e.在
选项
部分(假设它在前面定义,然后在后面分配),添加空
计时器
变量

var options = {
'interval',
//Other variables
'timer',
};
然后,在处理click事件时调用
clearInterval
两次

$("#promo-items > li > a").click(function () {

if( options.timer != null ) {
clearInterval(options.timer);
clearInterval(options.timer);
}

options.timer = setInterval(timerCom, options.interval);

});
这对我来说很有魅力


再次,如果这太晚了,我很抱歉。

这种使用大括号的方式使代码几乎无法阅读:p.大括号应该在自己的行中。我对这场辩论不感兴趣,但事实上,谷歌的编码标准说“由于插入了隐式分号,因此请始终将大括号放在打开的同一行上。”欢迎使用SO!如果需要提供其他信息,请编辑您的问题。对于有关答案的特定问题,请使用注释。因此,这不是一个论坛,答案字段仅用于回答问题。
var options = {
'interval',
//Other variables
'timer',
};
$("#promo-items > li > a").click(function () {

if( options.timer != null ) {
clearInterval(options.timer);
clearInterval(options.timer);
}

options.timer = setInterval(timerCom, options.interval);

});