2011-11-17 99 views
0

如何重新运行(从0开始)setTimeOut()?如何重新运行setTimeOut()?

这就是我基于其他问题想:(它不工作)

var timer; 
function talk() { 
    clearTimeout(timer); 
    $('#dialog').show(); 
    timer = setTimeout(function(){ 
     $('#dialog').hide(); 
     }, 2000); 
} 

$("#dialog").hover(function() { 
    talk(); 
    }); 

talk(); 

我怎样才能正确地取消的setTimeout的东西,然后再次运行呢?

你可以看到它不工作在这里:jsfiddle.net/yrBGm

+0

可能重复http://stackoverflow.com/questions/8161489/how-to-rerun-settimeout –

+2

@ Keith.Abramo:但是这就是*这个问题!所以,不是“可能的重复”,而是“某些重复”。:-) – ruakh

+1

哪个p艺术不起作用?没有“重新运行”的概念,或者从0开始,并且已经排队的超时 - 你所能做的就是取消它,然后创建一个新的(不相关的)超时。通过'timer = setTimeout(...)'排队超时,您可以通过调用'clearTimeout(timer)'来取消它。你的代码似乎已经这样做了。 – nnnnnn

回答

0

这会检查悬停是否发生。如果是,则取消超时并稍后重新运行。如果不是,超时继续说:

var timer; 
function talk() { 
    if ($('#dialog2').hasClass('talking')) { 
     clearTimeout(timer); 
     $('#dialog2').removeClass('talking'); 
    } else { 
     $('#dialog').show(); 
     timer = setTimeout(function(){ 
      $('#dialog').hide(); 
     }, 2000); 
    } 
} 

$("#dialog2").hover(function() { 
    talk(); 
    $('#dialog2').addClass('talking'); 
}); 

编辑:

此外,当您定义的计时器“VAR定时器;”,定时器是不确定的,所以你可以你在运行之前进行测试,如果它是未定义“计时器= setTimeout的(funcion(){...这样的:

if (timer == undefined) time = setTimeout(funciton() { 
    .... 
},time); 
0

这不是完全清楚你问什么,但是这条线将停止你正在运行的定时器:

clearTimeout(timer); 

而且,然后如果你想要重新启动它,你应该这样做:

timer = setTimeout(function(){ 
    $('#dialog').hide(); 
}, 2000); 
+1

在措辞上稍作澄清:'clearTimeout()'不会停止“任何挂起的定时器”,只是参数指定的定时器。 (对于显示的代码应该只是最新的计时器。) – nnnnnn