setTimeout包含多个项目

时间:2015-01-15 00:40:27

标签: javascript jquery timer

我试图在多个li项目上有一个setTimeout函数,它再次有ul和li。幻灯片动画工作正常,但我希望在再次关闭slideUp之前有一个延迟。但它不起作用。幻灯片下降但不再上升。我认为这是因为我必须为每个li ul(索引)都有一个索引的setTimeout函数。但我不知道如何让它发挥作用。有人能指出我正确的方向吗?谢谢!

var menu = $('#menu').find('li').has('ul'); 
var timer;
menu.on('mouseenter', function(){
  clearTimeout(timer);
  $(this).find('>ul').stop().slideDown();                       
});

menu.on('mouseleave', function(){
  clearTimeout(timer);
  timer = setTimeout(function() {
    $(this).find('>ul').stop().slideUp();
  },1000);
});

1 个答案:

答案 0 :(得分:0)

问题是你有多个lis,他们会取消开放的。您需要为每个li分配超时,或者您需要查看它们是否是另一个li才能关闭它。

var lis = $('#menu').find('li').has('ul');

lis.on('mouseenter', function(){
    var li = $(this);
    var timer = li.data("timer");    
    clearTimeout(timer);
    $(this).find('>ul').stop().slideDown();                         
});

lis.on('mouseleave', function(){
    var li = $(this);
    var timer = setTimeout(function() {
            $(this).find('>ul').stop().slideUp();
        },1000);
    li.data("timer", timer);
});