如何删除子导航重叠?

时间:2011-12-12 20:26:22

标签: javascript jquery navigation hover submenu

我正在尝试创建子导航。现在我有两个subnav。当我将鼠标悬停在主菜单上的第一个项目上时,会出现相应的子菜单。但是当我将鼠标悬停在第二个项目上时,第二个子导航会出现在第一个项目上。如何编写代码以便不会发生这种情况?

url:http://arabic001.com

$(document).ready(function() {

        $('#arbNavText01').mouseover(function()  {
            $('#subNav01').show('slow');
        });

        $('#subNav01').mouseleave(function() {
            $('#subNav01').hide('slow');
        }); 


         $('#arbNavText02').mouseover(function()  {
            $('#subNav02').show('slow');
        });

        $('#subNav02').mouseleave(function() {
            $('#subNav02').hide('slow');
        }); 



        })

我刚尝试了Scott的以下建议,我无法在悬停时显示和隐藏子菜单。有关如何解决这个问题的任何想法?这是我的新代码:

HTML

<div id="menu01" class="menu_item">
            <div id="engNavText01">Alphabet</div>
            <div id="arbNavText01">الأحرف</div>
            <div id="subNav01" style="display:none;">
                <a href="colors" class="subNav">
                    <span style="font-size:26px; cursor:pointer;">قراءة</span</a>
                    <br>reading<br><br>
        </div>
        </div>

        <div id="menu02" class="menu_item">
            <div id="engNavText02">Numbers</div>
            <div id="arbNavText02">الأحرف</div>
            <div id="subNav02" style="display: none; ">
                <a href="colors" class="subNav">
                    <span style="font-size:26px; cursor:pointer;">قراءة</span</a>
                    <br>reading<br><br>
        </div>
        </div>

和JS

$(document).ready(function() {

$('.menu_item').children().hover(
function(){
    $subNav = $(this).parents('menu_item').children("div[id^='subNav'");
    if ($subNav.css('display', 'none')){
        $subNav.show('slow');
    }
},
function(){
    $(this).parents('menu_item').children("div[id^='subNav'").hide('slow');
});

})

1 个答案:

答案 0 :(得分:2)

您已创建了一个mouseleave事件,但您只是将其附加到子菜单。因此,为了使菜单消失,用户必须将鼠标悬停在子菜单上然后移出。在打开新子菜单之前,您可以通过隐藏其他子菜单来实现您想要的效果。因此,保留您的mouseleave事件,您可以将2个鼠标悬停事件修改为:

    $('#arbNavText01').mouseover(function()  {
        $('#subNav02').hide('slow');
        $('#subNav01').show('slow');
    });
    $('#arbNavText02').mouseover(function()  {
        $('#subNav01').hide('slow');
        $('#subNav02').show('slow');
    });

编辑评论: 当我去看你的页面时,我正在思考这个问题。我想如果你在html中使用了稍微不同的结构,那么就可以完成。现在你的菜单div在结构上并没有明显的相互关联,所以可以添加一个div,它可以包含与每个菜单项相关的3个元素。

我要吐出一个想法,它可能甚至没有工作,更不用说是最好的方式了。

<div id="menu01" class="menu_item">
    <div id="engNavText01">Alphabet</div>
    <div id="arbNavText01">الأحرف</div>
    <div id="subNav01" style="display: none; ">
        <a href="colors" class="subNav"><span style="font-size:26px; cursor:pointer;">قراءة</span</a>
        <br>reading<br><br>
    </div>
</div>
<div id="menu02" class="menu_item">...

编辑JS,我认为现在它可以工作

$('.menu_item').hover(
    function(){
        $subNav = $(this).children("div[id^='subNav']");
        if ($subNav.css('display', 'none')){
            $subNav.show('slow');
        }
    },
    function(){
        $(this).children("div[id^='subNav']").hide('slow');
    }
);

JSFiddle尝试一下,似乎没问题。可能需要对您的用途进行一些修改。