2009-10-05 53 views
0

我已經使用該嵌套UL的,像這樣的下拉菜單中的一個項目:使用jQueryjQuery的.hover()是讓我瘋

<ul id="nav"> 
    <li id="thome" class="navtab"> 
    <a href="#" class="navlink lhome" id="nav_home" onclick="doCurrent('home');">HOME</a> 
     <ul id="subnav_home" class="submenu"> 
     <li><a href="#">Dashboard</a></li> 
     <li><a href="#">SMS</a></li> 
     <li><a href="#">Email</a></li> 
     <li><a href="#">Twitter</a></li> 
     </ul> 
    </li> 
</ul> 

,我添加了一個.hover()來.navtab文件中.show()是.submenu文件。問題在於,當光標移動到新的ul中時,.nover() - .navtab的輸出會觸發.hide()子菜單,儘管我有li的高度,因此它完全包裝.submenu ul。

我已經嘗試向.hide()添加延遲,但是如果將光標快速傳遞到navtab欄上,就可以一次獲得所有子菜單。

適合我的任何解決方案?這裏是相關的Javascript。 hide()函數與.show()完全相同,只是它縮小了高度並隱藏了ul(顯然)。

$('.navtab').hover(
     function(){ 
      tabShowSubnav($(this).attr('id')); 
     }, 
     function(){ 
      tabHideSubnav($(this).attr('id')); 
    }); 

function tabShowSubnav(menu){ 

    var sb = '#' + menu + ' > .submenu'; 
    var tb = '#' + menu; 
    $('.navtab').each(function(){ 
     if (!$(this).hasClass('current_page')){ 
      $(tb).addClass('nav_hover'); 
     } 
    }); 
    $(tb).css('height','239px');  
    $(sb).show(); 
} 

回答

0

我終於不得不使用jQuery插件hoverIntent,它忽略了用於mouseout目的的子項。

0
$('.navtab').hover(
    function() { 
     $(this).children(".submenu").show().children('.current_page').addClass("nav_hover"); 
    }, 
    function() { 
     $(this).children(".submenu").hide(); 
    }); 

這爲我工作。

+0

孩子們('current_page')做什麼? – montrealist 2009-10-05 19:08:50

+0

不是 - 同樣的問題。如果你在平局上非常快,你可以讓它不隱藏(),但否則當你進入子菜單時它會消失。 – 2009-10-05 19:28:42

0
$('.navtab').hover(
     function() { 
        $(this).children(".submenu").show().children('current_page').addClass("nav_hover"); 
     }, 
     function() { 
     }); 

    $(".submenu").mouseout(function(){ 
     $(this).hide(); 
    });