0

这就是我想要的:当我将鼠标悬停在 div 之外时超时,如果我再次将鼠标悬停在 div 顶部则取消。

如果我删除取消功能,该代码将起作用。所以显示和隐藏 div 效果很好。

这是我的代码:

$(document).ready(function ()
    {
        var timeoutID;
        function clearAlert()
        {
            window.clearTimeout(timeoutID);
        }​

        if ($('.txtVote').text() == "Avgi stemme")
        {
            $('#starInfo').hover(
            function ()
            {
                clearAlert();
                $('#CarDetailsButtons').css('right', '10px');
                $('#voteStars').show();
            },
            function ()
            {
                console.log("hide iniated");
                timeoutID = window.setTimeout(hideStars, 2000);
                console.log("hide executed");
            });     
        }

        function hideStars()
        {
            console.log("hideStars ran");
            $('#CarDetailsButtons').css('right', '45px');
            $('#voteStars').hide();
        }
});

而且,这是我的错误:

Uncaught SyntaxError: Unexpected token ILLEGAL

紧随其后出现在行上window.clearTimeout(timeoutID);

任何人都能够看到我做错了什么?:)

编辑: *工作*

所以,似乎我有某种复制粘贴错误。我手动编写了 clearAlert 函数,就像以前一样,现在它可以工作了。

感谢所有的投入!

4

2 回答 2

2

尝试这个:

var that = this;
that.timeoutID = null;

...

that.timeoutID = ...

或者

你必须声明 var timeoutID = null; 全球的。因此,您在全局上下文中而不是在 $(document).ready 的函数上下文中拥有 var。

最好的解决方案是编写一个带有计时器的小 js 类。所以你没有全局冲突,它可以工作。

问候!

于 2012-11-05T10:16:43.167 回答
0

我建议您将您的功能移到 doc 之外,如下所示:

function hideStars()
    {
        console.log("hideStars ran");
        $('#CarDetailsButtons').css('right', '45px');
        $('#voteStars').hide();
    }

function clearAlert()
    {
        window.clearTimeout(timeoutID);
    }​

$(document).ready(function ()
  {
    var timeoutID;


    if ($('.txtVote').text() == "Avgi stemme")
    {
        $('#starInfo').hover(
        function ()
        {
            clearAlert();
            $('#CarDetailsButtons').css('right', '10px');
            $('#voteStars').show();
        },
        function ()
        {
            console.log("hide iniated");
            timeoutID = window.setTimeout(hideStars, 2000);
            console.log("hide executed");
        });     
    }


});
于 2012-11-05T10:15:31.930 回答