如何清除javascript中的超时?

时间:2014-02-04 13:13:28

标签: javascript settimeout cleartimeout

为什么这不起作用?

    $('#plugbot-likebox').hover(function () {

      $('#plugbot-ui').slideDown();
      $('#ZobrazNastavenia').fadeOut("fast");

    }, function () {
              toUi = setTimeout(function(){
              $('#plugbot-ui').slideUp();
              }, 1500);

            toNastavenia = setTimeout(function(){
                $('#ZobrazNastavenia').fadeIn("fast");
            }, 2000);

    });

我需要明确超时但这不起作用。请告诉我为什么。感谢。

3 个答案:

答案 0 :(得分:2)

timeoutUItimeoutNastavenia是本地作用于您定义的匿名函数的变量。

如果您希望它们在更广泛的范围内可用,那么您必须在更广泛的范围内声明它们。

不要在匿名函数中使用var。请在这些功能之外使用var variableName。 (例如,在问题代码的第一行之前)。

答案 1 :(得分:0)

这是清除超时的示例:

var myVar;

function myFunction()
{
myVar = setTimeout(function(){alert("Hello")},3000);
}

function myStopFunction()
{
clearTimeout(myVar);
}

你可以看到myVar是在全局范围内定义的,所以在你的代码中它不起作用,因为timeoutUI和timeoutNastavenia是私有变量,你应该使用timeoutUI=...而不是var timeoutUI=..

答案 2 :(得分:0)

如果我使用jQuery和超时,那么我总是将它们设置在元素本身上:

$('#plugbot-ui').data(
    'timeout-toUi',
    setTimeout(function(){
          $('#plugbot-ui').slideUp();
    }, 1500)
);

通过这种方式,您可以通过从元素本身获取ID来清除超时:

clearTimeout($('#plugbot-ui').data('timeout-toUi'));

顺便说一句,使用jQuery时,您可以使用.delay()

$('#plugbot-ui').delay(1500).slideUp();

您可以使用.stop()停止动画并清除并完成所有动画:

$('#plugbot-ui').stop(true, true);