如何在下拉菜单中的子菜单中保留父菜单

时间:2010-06-23 17:10:21

标签: php javascript jquery css

我正在尝试创建一个下拉菜单。它运作良好。我想把顶部的菜单当盘旋成白色。向下移动到子菜单时,顶部菜单应保持白色。但顶部菜单变成了正常的原始颜色。

如何在子菜单中移动鼠标时保持父菜单悬停。

代码在这里:

HTML

 <ul id="jsddm" class="menu_nor_cont">
         <li style="margin-left:15px;"><a href="#">Home</a>
        <li><a href="#">Job Seeker Login</a>

        </li>
        <li><a href="#">Post Resume</a>
        </li>
        <li><a href="#">Search jobs<span style="margin-left:5px;"><img src="images/down.png"  style="width=15px; height=8px;"></span></a>
            <ul>
                <li><a href="#">Advanced Search</a></li>
                <li><a href="#">Jobs by Company</a></li>
                <li><a href="#" style="border-bottom:none;">Jobs by category</a></li>
            </ul>
        </li>
        <li><a href="#">Employer Login</a></li>
        <li><a href="#"  style="border-right:none;">Post Job</a></li>
    </ul>

JS

var timeout    = 0;
var closetimer = 0;
var ddmenuitem = 0;

function jsddm_open()
{  jsddm_canceltimer();
   jsddm_close();
   ddmenuitem = $(this).find('ul').css('visibility', 'visible');}

function jsddm_close()
{  if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');}

function jsddm_timer()
{  closetimer = window.setTimeout(jsddm_close, timeout);}

function jsddm_canceltimer()
{  if(closetimer)
   {  window.clearTimeout(closetimer);
      closetimer = null;}}

$(document).ready(function()
{  $('#jsddm > li').bind('mouseover', jsddm_open)
   $('#jsddm > li').bind('mouseout',  jsddm_timer)});

document.onclick = jsddm_close;

CSS

#jsddm
{   margin: 0;
    padding: 0;


}

    #jsddm li
    {   
        float: left;
        list-style: none;

    }

    #jsddm li a
    {   display: block;
        padding: 5px 12px;
        padding-left:15px;
        padding-right:15px;
        text-decoration: none;
        border-right: 1px solid #DBDBDB;
        padding-bottom:6px;
        color: #EAFFED;
        white-space: nowrap}

    #jsddm li a:hover
    {   
        background-color:#FFF;
        color:#000;

    }

        #jsddm li ul
        {   margin: 0;
            padding: 0;
            position: absolute;
            visibility: hidden;
            border:#3895C0 1px solid;
            border-top:none;

            z-index:1001;
            margin-left:-2px;
        }

        #jsddm li ul li
        {   float: none;
            display: inline;
            margin:0px;


        }

        #jsddm li ul li a
        {   width: auto;
            background: #fff;
            color:#080CB2;
            font-weight:normal;
            font-size:11px;
            border-bottom:1px solid #CCC;
            text-decoration:none;
            width:180px;
        }

        #jsddm li ul li a:hover
        {

            text-decoration:underline;
            color:#080CB2;
        }

2 个答案:

答案 0 :(得分:4)

我不明白为什么你需要在这里使用JS。我看过很多人试图制作简单的下拉菜单的例子,这些菜单没有花时间使用正确的HTML结构并使用CSS来操作元素。

除非你真的想要某种动画(再次使用CSS3转换来制作动画)然后我会建议使用这个答案我给另一个有一段时间下拉问题的用户。

CSS drop-down menus pushing page content down

上面的链接为您提供了一个非常快速,直接的HTML + CSS下拉解决方案示例。使用此示例,您可以通过仅使用HTML和CSS保持“已选择”父链接来实现您的目标。


编辑:

直接说出您的问题。你需要做的就是解决你的问题,不同的是设置你的CSS。

变化:

#jsddm li a:hover {   
    background-color:#FFF;
    color:#000;
}

要:

#jsddm li:hover a {
    background-color:#FFF;
    color:#000;
}

如您所见,我选择li元素来使用:hover伪选择器而不是a标签。这是因为您将子菜单ul包装在此标记内。所以从技术上讲,它是父元素。

答案 1 :(得分:1)

问题是由于“悬停”状态存在于CSS中,所以当你离开“a”元素时,你会松开悬停状态。

对您的代码进行一些修改应该可以实现这一点。

            function jsddm_open() {
                jsddm_canceltimer();
                jsddm_close();
                ddmenuitem = $(this).find('ul').css('visibility', 'visible');
                $(">a", $(this)).css("background-color", "#FFF");
            }

           function jsddm_close() {
                if (ddmenuitem) {
                    ddmenuitem.css('visibility', 'hidden');
                    $(ddmenuitem).prev().css("background-color", "");
                }
            }

注意:您在发布的代码

中也缺少结尾的li标签