2013-07-09 37 views
1

我很困惑,爲什麼這不起作用,請有人指出我在正確的方向嗎?我寫了一些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; 
     }); 
    } 
); 
+0

你可以發佈你的HTML和jsFiddle.net例如,如果可能的嗎? – j08691

+0

你能提供你的HTML嗎?還是小提琴? –

回答

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); 
    } 
); 
3

hidden變量的回調函數內懸停刪除var。您將在本地重新分配這些變量,因此它不會監聽全局變量hidden

更改此:

var hidden = false;

這樣:

hidden = false;

+0

夢幻般的回覆,這似乎已經完成了這項工作。現在還有一個問題,在另一個事件結束之前它仍然開火。我希望變量能夠解決這個問題,不管怎樣,你是否知道要等到隱藏結束? –

+0

在調用'$(this).children('ul')。slideDown()''之前嘗試設置'hidden = false'。這可能會起作用,否則你可能會在jQuery中使用'mouseenter' /'mouseleave'事件來做些事情。 – jrthib

+0

@SimonStaton我對我的答案做了一些改變,應該使用超時工作。我沒有測試它,所以可能需要調整。 – marteljn