2013-04-25 3 views
-1
$('.showmenu').bind("mouseenter", function (e) { 
       $('ul.secondul').show(); 
}); 
$('.showmenu').bind("mouseleave", function (e) { 
       $('ul.secondul').hide(); 
}); 

Есть ли способ сделать вторую функцию не срабатывать сразу же, но после 1 секунды задержки? Поэтому, когда пользователь случайно выталкивает мышь из выпадающего меню, вкладка не закрывается немедленно и дает пользователю возможность переместить мышь обратно на нее.Установка задержки или таймаута с помощью jQuery

+0

Использование hover: http://api.jquery.com/hover/ –

+0

дубликат http://stackoverflow.com/questions/2939980/jquery-how-to-sleep-or-delay и SO MANY OTHERS , – Colleen

+0

@Colleen Вы ошибаетесь. Задержка() не будет работать в этом случае. – Jerry

ответ

1

Вы можете сделать это:

$('.showmenu') 
.bind("mouseenter", function (e) { 
    if($(this).data("timer")) 
     clearTimeout($(this).data("timer")); 
    $('ul.secondul').show(); 
}) 
.bind("mouseleave", function (e) { 
    $(this).data("timer", setTimeout(function(){ 
     $('ul.secondul').hide(); 
    }, 1000)); 
}); 

Использование $(this).data, потому что это класс, и вы можете иметь больше .showmenu пунктов.

1

Вы можете сделать что-то вроде этого -

vat timeout; 
$('.showmenu').bind("mouseenter", function (e) { 
       $('ul.secondul').show(); 
       clearTimeout(timeout); 
}); 
$('.showmenu').bind("mouseleave", function (e) { 
      timeout = setTimeout(function(){ 
      $('ul.secondul').hide(); 
      },1000); 
}); 
0

Я считаю, JQuery парения является то, что вы хотите использовать:

$('.showmenu').hover(
    function() { 
     $('ul.secondul').show(); 
    }, 
    function() { 
     $('ul.secondul').hide(); 
    } 
); 
+0

Здесь нет задержек. – showdev

+0

Там не обязательно, поскольку он решает указанную проблему: «Поэтому, когда пользователь случайно выталкивает мышь из выпадающего меню, вкладка не закрывается немедленно и дает пользователю возможность переместить мышь обратно на нее «. Попробуйте. –

+0

Я не вижу, как ваш код заставляет вкладку «не закрываться сразу», когда пользователь «выталкивает мышь». http://jsfiddle.net/7VcwF/1/ Поскольку OP не предоставил HTML, возможно, я не понимаю, что подразумевается под «вкладкой выпадающего меню». – showdev

1

Если вы используете fadeIn() и fadeOut() (или другие анимации), вы можете цепи его с delay() примерно так:

$('.showmenu').hover(

    function() { 
    $('ul.secondul').stop(true,true).fadeIn(200); 
    }, 

    function() { 
    $('ul.secondul').stop(true, true).delay(1000).fadeOut(200); 
    } 

); 

Fiddle : http://jsfiddle.net/7VcwF/