-1

Why is this not working?

    $('#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);

    });

I need clear timeout but this not working. Please tell me why. Thanks.

4

3 回答 3

2

timeoutUI 并且timeoutNastavenia是局部范围为您定义它们的匿名函数的变量。

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

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

于 2014-02-04T13:15:21.817 回答
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);
于 2014-05-28T14:27:33.907 回答
0

这是清除超时的示例:

var myVar;

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

function myStopFunction()
{
clearTimeout(myVar);
}

如您所见, myVar 是在全局范围内定义的,因此在您的代码中它将不起作用,因为 timeoutUI 和 timeoutNastavenia 是私有变量,您应该使用timeoutUI=...而不是var timeoutUI=..

于 2014-02-04T13:16:31.697 回答