2009-10-27 76 views
0

我正在編寫我自己的簡單下拉菜單...並且效果不太好。jQuery下拉問題

我只需要列表中的直接孩子被滑過。

此外,如果用戶通過鏈接或子菜單,它需要保持關閉狀態。

感謝您的幫助!

我基本的HTML:

  <ul> 
       <li class="media drop-down"><a href="#">Link</a> 
        <ul class="sub-menu"> 
         <li> 
         This is stuff! 
         </li> 
        </ul> 
       </li> 
      </ul> 

我的jQuery

$('.sub-menu').hide(); 
var menu = $('.drop-down').children('ul'); 
var down = function (x) {menu.stop().slideDown(); } 
var up = function (x) {menu.stop().slideUp(); } 
$("li.drop-down").hover(down, up);//show/hide buttons 

回答

2

這應該這樣做 - 注意上下文的第二個參數$

$('.sub-menu').hide(); 
var down = function (x) {$('ul.sub-menu', this).stop().slideDown(); } 
var up = function (x) {$('ul.sub-menu', this).stop().slideUp(); } 
$("li.drop-down").hover(down, up);//show/hide buttons 
+0

這很好。當我移動菜單和子菜單時,我只需要保持子菜單。 – 2009-10-27 17:12:41

+0

如果你刪除了.stop(),那麼效果會更好 – Greg 2009-10-27 17:20:53

+0

不確定到底發生了什麼......它看起來像在你調用.stop()之後,下次它不會滑過你停在的點 – Greg 2009-10-27 17:21:34

-1

此行

var menu = $('.drop-down').children('ul'); 

返回一組與本級「下拉」元素的直接子所有UL元素。你可能想要做的是在你的每個向上和向下函數中包含以下內容:

var menu = $(this).children('ul'); 
+0

var菜單= $(this).children('ul);'在這種情況下,$(this)並不意味着你想要它。它可能指的是整個文件。 – idrumgood 2009-10-27 17:12:35

+0

在回調事件(如懸停)中,$(this)引用觸發元素。我建議他把這一行寫在每個函數中,儘管可能還不清楚。 – 2009-10-27 17:13:50