下拉菜单超时问题

Dropdown Menu timing out issue

本文关键字:问题 超时 下拉菜单      更新时间:2023-09-26

我不太确定为什么我的菜单计时错误。当您将鼠标悬停在菜单标题上以查看下拉菜单时,它会闪烁其子菜单,因此您无法从中选择链接。知道为什么吗?我已经为这个工作太久了。

var menuTimeout = '';
$('.nav_click').bind({
mouseover: function(){
    if($(this).hasClass('submenus') == true){
        var whichMenu = $(this).attr('id');
        var displayMenu = '';//yes its blank for a reason
        if(whichMenu == 'navi2'){displayMenu = 'menu1';}
        if(whichMenu == 'navi3'){displayMenu = 'menu2';}
        if(whichMenu == 'navi4'){displayMenu = 'menu3';}
        if(whichMenu == 'navi5'){displayMenu = 'menu4';}
        if(displayMenu != '')
        {
            var leftOffset = ($(this).position().left-5);
            var topOffset = ($(this).offset().top+$(this).height()-10);
            $('#'+displayMenu).css({"display":"block", "position":"absolute", "left":leftOffset+"px", "top":topOffset+"px"});
        }
    }
    var menuitem = $(this).attr('id');
    if(menuitem == "navi1"){$(this).css({"background-position":"0 -63px"});}
    if(menuitem == "navi2"){$(this).css({"background-position":"-100px -63px"});}
    if(menuitem == "navi3"){$(this).css({"background-position":"-230px -63px"});}
    if(menuitem == "navi4"){$(this).css({"background-position":"-420px -63px"});}
    if(menuitem == "navi5"){$(this).css({"background-position":"-524px -63px"});}
    if(menuitem == "navi6"){$(this).css({"background-position":"-638px -63px"});}
    if(menuitem == "navi7"){$(this).css({"background-position":"-737px -63px"});}
},
mouseout: function(){
   if($('.submenublock').is(":visible") == true){menuTimeout = setInterval(function() {$('.submenublock').fadeOut('slow').css({"display":"none"}); clearInterval(menuTimeout);}, 1500);}
    var menuitem = $(this).attr('id');
    if(menuitem == "navi1"){$(this).css({"background-position":"0 0"});}
    if(menuitem == "navi2"){$(this).css({"background-position":"-100px 0"});}
    if(menuitem == "navi3"){$(this).css({"background-position":"-230px 0"});}
    if(menuitem == "navi4"){$(this).css({"background-position":"-420px 0"});}
    if(menuitem == "navi5"){$(this).css({"background-position":"-524px 0"});}
    if(menuitem == "navi6"){$(this).css({"background-position":"-638px 0"});}
    if(menuitem == "navi7"){$(this).css({"background-position":"-737px 0"});}
},
click: function(){
    window.location = $(this).attr('rel');
}
});
$('.submenublock ul').bind({
mouseover: function(){
clearInterval(menuTimeout);
},
mouseout: function(){
menuTimeout = setInterval(function()                                                             {$('.submenublock').fadeOut('slow').css({"display":"none"}); clearInterval(menuTimeout);}, 500);   
}
 });

可能是因为mouseover处理程序触发了mouseout处理程序。

当将鼠标悬停在顶级项上时,最终执行以下代码:

 $('#'+displayMenu).css({"display":"block", "position":"absolute", "left":leftOffset+"px", "top":topOffset+"px"}

这会导致顶层项失去焦点(出于某种原因),从而使"mouseout"代码立即触发,使0.5秒后刚刚打开的菜单淡出。

我试着在mouseout中注释淡出/延迟线,这种行为停止了(授予,菜单也不会消失,但我们已经确定了问题)

mouseout: function(){
  // if($('.submenublock').is(":visible") == true){menuTimeout = setInterval(function() {$('.submenublock').fadeOut('slow').css({"display":"none"}); clearInterval(menuTimeout);}, 1500);}