JQuery幻灯片等待变量未设置

时间:2013-07-09 15:52:02

标签: javascript jquery

我很困惑为什么这不起作用,请有人指出我正确的方向吗?我写了一些JQuery来滑下子菜单。然而,当在菜单上移动鼠标时,它会触发数千个事件,我试图让它等待隐藏完成,然后再做另一个滑动。然而,这似乎不起作用:

$("li.title").children('ul').hide();
var hidden = true;

$("li.title").hover(
    function() {
        if (hidden == true){
        var height = $(this).children('ul').height() + $(this).height();
        $(this).height(height);
        $(this).children('ul').slideDown();
        var hidden = false;
        }
   },
   function() {
        $(this).height(25);
        $(this).children('ul').hide(function() {
        var hidden = true;
        });
   }
);

2 个答案:

答案 0 :(得分:3)

从悬停中的回调函数中的var变量中删除hidden。您在本地重新分配这些变量,因此它不会监听全局hidden变量。

改变这个:

var hidden = false;

到此:

hidden = false;

答案 1 :(得分:1)

您需要删除var。问题是您正在为回调函数创建一个hidden范围的新实例,而不是查看全局hidden

$("li.title").children('ul').hide();
var hidden = true,
    myTimeout;

$("li.title").hover(
    function() {
        clearTimeout(myTimeout);
        myTimeout = setTimeout(function(){
          if (hidden == true){
            var height = $(this).children('ul').height() + $(this).height();
            $(this).height(height);
            $(this).children('ul').slideDown();
            hidden = false; //Removed var here
          }
        },100);
   },
   function() {
        clearTimeout(myTimeout);
        myTimeout = setTimeout(function(){
        $(this).height(25);
        $(this).children('ul').hide(function() {
        hidden = true; //and here
        });
        },100);
   }
);