2009-04-16 55 views
1

我想制作一个简单的菜单,其中第一级菜单条目是li元素,第二级是具有自己的li元素的ul块。没有什么明亮的。 Css包含显示:对于所有子菜单都没有,我的(乐观的)想法只是在第一级条目触发mouseover时显示正确的ul元素,然后在子菜单(ul元素)上触发mouseout时隐藏它们。我有一些问题要了解发生了什么。在Firefox上,一切都很好,动作序列:进入第一级菜单 - 进入子菜单 - 从子菜单退出,表明正确的事件序列被触发:menuOn subMenuOn subMenuOff menuOff。我不明白为什么在IE中以相同的事件顺序subMenuOff在subMenuOn后突然触发:结果是子菜单立即消失。这就像这对夫妇(subMenuOn subMenuOff)在禁用子菜单的同时进行了trigegred。使用mouseover或mouseenter没有改变。使用悬停不会改变这种情况。对发生的事情有所了解?这是代码:Jquery menu:mouseover/mouseout moseenter/mouseleave craziness

$(document).ready(
     function(){ 
     enableMenu();       
    } 
); 

var flagOnSubMenu = false; 

function enableMenu(){ 
    $('li.menu').bind('mouseenter', menuOn);    
    $('li.menu').bind('mouseleave', menuOff);   
    $('ul.sottomenu').bind ('mouseenter', subMenuOn); 
    $('ul.sottomenu').bind ('mouseleave', subMenuOff); 
} 

function menuOn(){ 
    scrivi('menuOn'); 
    if (flagOnSubMenu){ 
     scrivi('noAction'); 
     return; 
    } 

    var subMenuId; 

$('ul.sottomenu').hide();            
     subMenuId = $(this).find("ul").attr('id'); 
     $('#' + subMenuId).show(); 


} 

function menuOff(){ 
    scrivi('menuOff<br>'); 
    return; 
} 

function subMenuOn(){ 
    scrivi('subMenuOn'); 
    flagOnSubMenu = true; 
} 

function subMenuOff(){ 
    scrivi('subMenuOff'); 
    flagOnSubMenu = false; 
    $(this).hide();    
} 

function scrivi(arg){ 
    $('#debug').html($('#debug').html() + ' ' + arg); 
} 

回答

1

某些浏览器/框架冒泡事件,有些不会。

即(我不确定它绕着AFA浏览器的方向)当鼠标从元素移动到子元素时,一个浏览器将触发mouseout。另一个不会但会触发一个可以被父元素捕获的鼠标悬停。

+0

不确定。我也使用了悬停功能,应该在移动到子元素时解决问题。不工作。 – Daniel 2009-04-16 17:48:26

3

我有一些疯狂的问题与mouseover和mouseout事件。

$("#menu>li").hover(
    function(){ 
     $("#menu *:animated").stop(true,true).hide(); //stop the madness 
     $('ul',this).slideDown(); 
    }, 
    function(){ 
     $('ul',this).slideUp("fast"); 
    } 
); 

停止动画是我的关键。没有这些,动画会在我完成我的菜单完成后长时间保持开启。