Jquery / HTML下拉菜单悬停状态

时间:2012-07-27 07:23:13

标签: jquery html

我正在尝试创建一个下拉菜单,即使它悬停在下拉div('#units-menu-links')上也会在悬停时保持打开状态。当用户仍然悬停在“units-menu-links”div上时,我无法让它保持打开状态。目前它没有做任何事情,但在第二个函数内部使用.toggle之前,只要用户没有悬停在“#units-nav”div上,它就会消失。

以下是我的HTML的样子:

<div id="units-menu-links">
    <center>
            <p class="units-menu-links-items" href="dynamically generated URL">Menu Item</p>
    </center>
</div>

<div id="menu">
        <div id="menu-inside">
                <div class="bar">
                        <div class="nav-block" id="units-nav">
                                <a href="/link/">Menu Button</a>
                        </div>
                </div>
        </div>
</div>

这是我的Jquery:

$('#units-menu-links').hide();
    $("#units-nav").hover(
            function () {
                // Over the hover.
                $('#units-menu-links').toggle();
            },
            function () {
                // PLEASE READ THE FOLLOWING COMMENTS TO UNDERSTAND THE FUNCTIONALITY I AM TRYING TO GET.
                // When the users leaves #units-nav and #units-menu-links
                // then do the "$('#units-menu-links').toggle();" again to hide this.
                // However if the user is hovering over "$('#units-menu-links').toggle();" then don't do anything.
            }
    );

(我已经看了很多关于SO的问题和答案以及在谷歌上看,并且找不到任何可以帮助我解决这个问题。看起来这是一个非常普遍的问题,但是人们已经创建了他们的HTML结构与我的不同,这使得很难找到资源。)

3 个答案:

答案 0 :(得分:1)

当鼠标移出子菜单时尝试隐藏菜单:

$('#units-menu-links').hide();
$("#units-nav").hover(
    function () {
        $('#units-menu-links').show();
    },
    function () {
    }
);
$("#units-menu-links").hover(
    function () {
    },
    function () {
        $('#units-menu-links').hide();
    }
);

​

理想情况下,我建议不使用JavaScript。

HTML:

<div id="menu" style="background-color: red">
    <div id="menu-inside">
        <div class="bar">
            <div class="nav-block" id="units-nav">
                <a href="/link/">Menu Button</a>
            </div>
        </div>
    </div>
    <div id="units-menu-links" style="background-color: green">
        <center>
            <p class="units-menu-links-items" href="dynamically generated URL">Menu Item</p>
        </center>
    </div>
</div>

CSS:

#menu #units-menu-links {
    display: none;
}

#menu:hover #units-menu-links {
    display: block;
}
​

这是Fiddle

答案 1 :(得分:1)

$('#units-menu-links').hide();
var timeOut;
$("#units-nav").hover(
    function () {
        // Over the hover.
        $('#units-menu-links').show();
        clearTimeout(timeOut);
    },
    function () {
        timeOut = setTimeout(function(){
            $('#units-menu-links').hide();
        }, 100);
    }
);

$('#units-menu-links').hover(
    function () {
        clearTimeout(timeOut);
    },
    function () {
        timeOut = setTimeout(function(){
            $('#units-menu-links').hide();
        }, 100);
    }
)

答案 2 :(得分:0)

使用悬停时,您应该将子菜单嵌套在#units-nav元素下。然后它会工作。 如果无法这样做,你可以对你的悬停功能的第二个回调实现一些超时,如果用户将鼠标悬停在#units-menu-links-element,你可以停止超时..但这有点糟糕,用户可以得到与这种行为相混淆。