Проблемы с получением скрипта jQuery .mouseenter () /. Mouseleave () с взаимодействием с пользователем для работы - PullRequest
1 голос
/ 28 октября 2011

Во-первых, извиняюсь за название, я не мог придумать подходящего.

Я не уверен, почему функция 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);
        });

Большое спасибо всем за любую помощь заранее,

Dan.

Ответы [ 2 ]

1 голос
/ 28 октября 2011

В новом коде 2 проблемы

  1. Внутри функции hide контекст $ (this) не совпадает с когда он вызывается внутри функции mouseout.
  2. Во-вторых, функция скрытия определяется как анонимная функция внутри функции 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);
}
1 голос
/ 28 октября 2011

Вы объявляете функцию hide() после вызова ее с помощью setTimeout.Просто поместите объявление перед вызовом setTimeout.

Кроме того, когда вы передаете строку кода в качестве первого аргумента setTimeout, он получает eval ed.eval это зло.Просто передайте объект функции:

function hide() {
    $(this).delay(800).animate({
        right: "-325px"
    }, 1000);
}
time = setTimeout(hide, 3000);
...