1

首先,为标题道歉,我想不出合适的标题。

我不确定为什么下面代码中的 hide() 函数在触发时在 firebug 中返回错误,我很确定一旦我消除了这个缺陷,其余代码将正常工作,任何帮助/建议将不胜感激.

Firebug 控制台错误:

hide is not defined
it-services() it-services (line 396)
time = setTimeout("hide()",3000); 

到目前为止我的代码:

        var time;

        $("#form").mouseenter(function() {
            clearTimeout(time);
            $(this).delay(800).animate({
                right: 0
            }, 2000);
        }).mouseleave(function() {
            function hide() {
                $(this).delay(800).animate({
                    right: "-325px"
                }, 1000);
            }
            time = setTimeout(hide,3000);
        });

非常感谢大家提前提供的任何帮助,

担。

4

2 回答 2

1

hide()使用setTimeout. 只需将声明放在setTimeout调用之前。

此外,当您将一串代码作为第一个参数传递给 时setTimeout,它会被eval编辑。eval是邪恶的。只需传递函数对象:

function hide() {
    $(this).delay(800).animate({
        right: "-325px"
    }, 1000);
}
time = setTimeout(hide, 3000);
于 2011-10-28T11:34:36.347 回答
1

新代码中有2个问题

  1. 在 hide 函数内部,$(this) 的上下文与在 mouseout 函数内部调用它时的上下文不同。
  2. 其次,hide函数在mouseout函数内部定义为匿名函数

我觉得如果它是在 mouseover 事件处理函数之外声明的函数会更有意义。这样,您可以从 setTimeOut 以及 mouseout 事件处理程序全局引用它。试试下面的代码。我相信这应该可以解决问题,或者至少让你领先一步。

var time;
var $form;

$("#form").mouseenter(function() {
    $form = $(this);
    clearTimeout(time);
    $(this).delay(800).animate({
        right: 0
    }, 2000);
}).mouseleave(function() {
    hide();
    time = setTimeout(hide,1000);
});
function hide() {
    $form.delay(800).animate({
        right: "-325px"
    }, 3000);
}
于 2011-10-28T12:35:55.363 回答