使用setTimeout / Cleartimeout时出现意外的令牌ILLEGAL

时间:2012-11-05 10:01:54

标签: javascript jquery

这就是我想要的:当我将鼠标悬停在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();
        }
});

而且,这是我的错误:

  

未捕获的SyntaxError:意外的标记ILLEGAL

出现在window.clearTimeout(timeoutID);

之后的行上

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

编辑: * 工作 *

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

感谢您的所有输入!

2 个答案:

答案 0 :(得分:2)

试试这个:

var that = this;
that.timeoutID = null;

...

that.timeoutID = ...

OR

你必须声明var timeoutID = null;全球。所以你在一个gloabl上下文中有var,而不是在$(document).ready的函数上下文中。

最好的解决方案是写一个带有计时器的小js-class。这样你就没有全局冲突了。

问候!

答案 1 :(得分: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");
        });     
    }


});