我有一个带有子菜单的菜单列表,这些子菜单没有嵌套用于样式目的。 因此,我将mouseenter和mouseleave以及settimeout一起用于悬停行为。

这是我的html:

<li class="dropdown"><a href="#">Link 1</a></li>
<div class="subnav">
<ul>
<li><a href="#">Link 1.1</a></li>
<li><a href="#">Link 1.2</a></li>
<li><a href="#">Link 1.3</a></li>  
<li><a href="#">Link 1.4</a></li>  
    </ul>
</div>

<li class="dropdown"><a href="#">Link 2</a></li>
<div class="subnav">
<ul>
<li><a href="#">Link 2.1</a></li>
<li><a href="#">Link 2.2</a></li>
<li><a href="#">Link 2.3</a></li>  
<li><a href="#">Link 2.4</a></li>  
    </ul>
</div> 

<li class="dropdown"><a href="#">Link 3</a></li>
<div class="subnav">
<ul>
<li><a href="#">Link 3.1</a></li>
<li><a href="#">Link 3.2</a></li>
<li><a href="#">Link 3.3</a></li>  
<li><a href="#">Link 3.4</a></li>  
    </ul>
</div> 

</ul>
</div><!-- End topNav -->

而我的jQuery:

$(document).ready(function(){  

var overSubmenuFlag = false;
var timeout;
var subnav;
var offset;

$("li.dropdown").mouseenter(function(){

    clearTimeout(timeout);
    $(".subnav").hide();

    $(this).children('a').addClass("active"); //Add active class to link element

    var subnav = $(this).next("div.subnav"); //find navigation box associated with this nav tab
    var offset = $(this).position(); //Position subnav relative to nav tab
    var leftpos = (offset.left + 15) + "px";
    var toppos = (offset.top + 36) + "px";
    subnav.css( { 
        position: 'absolute',
        left: leftpos, 
        top: toppos
    });

    subnav.show(); //Reveal subnav

}).mouseleave(function() {
    clearTimeout(timeout);
    var timeout = setTimeout(function() {
        if(!overSubmenuFlag) {
            var subnav = $("li.dropdown").next("div.subnav");
            subnav.hide();
            $("li.dropdown").children('a').removeClass("active");       
        }},100);        
});
$(".subnav").mouseenter(function(){
    clearTimeout(timeout);
    overSubmenuFlag = true;  
}).mouseleave(function(){   
    overSubmenuFlag = false; 
    $(".subnav").hide();
    $("li.dropdown").children('a').removeClass("active");       
}); 
});  

一切都按预期工作,除了以下各项:当我将鼠标移出一个导航标题并快速将鼠标悬停在另一个标题上时,与新标题相关联的子菜单会短暂出现,然后消失。 (在两个导航标题之间缓慢移动即可正常工作)。 输入新导航后,如何正确停止与setTimeout函数关联的所有操作(并关闭所有打开的子菜单)。 标头? 非常感谢您的帮助!

===============>>#1 票数:0

这是你的问题吗?

}).mouseleave(function() {
    clearTimeout(timeout);
    var timeout = setTimeout(function() {
    ^^^

  ask by Jean-Ralphio translate from so

未解决问题?本站智能推荐: