【问题标题】:How to keep the Parent menu hovered while the mouse in child menu in a Dropdown Menu当鼠标在下拉菜单中的子菜单中时如何保持父菜单悬停
【发布时间】:2010-06-24 03:31:04
【问题描述】:

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

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

代码在这里:

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;
        }

【问题讨论】:

    标签: php javascript jquery css


    【解决方案1】:

    我不明白你为什么需要在这里使用 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 包装在此标记中。所以从技术上讲,它是父元素。

    【讨论】:

    • 谢谢朋友,但我还是想知道问题
    • Lik @Kumu 表示,从技术上讲,在您的示例中,您不再“悬停”在该父元素上。纠正此问题的最佳方法是将子元素正确包装在父元素中,然后当您“悬停”这些子元素时,从技术上讲,您仍然会悬停在父元素中。因此,您的链接状态将保持白色。这是我在链接的 HTML + CSS 示例中解决的问题。我使用列表: ul > li 来完成这种父子效应
    • @clarke78:我在这个问题上 100% 支持你 - 如此之多,我已经删除了我现在多余的答案:-) 前几天我发布了一个类似的例子,这也可能证明有用的:stackoverflow.com/questions/3085712/…
    • 我也认为 CSS 也比 JS 解决方案更好,但遗憾的是 ":hover" 只适用于 IE6 的 "a" 元素......但如果你不关心 IE6,就去吧路线
    • 正如 Kumu 所指出的,IE6(我认为是 IE7)仅支持 a 标签上的 :hover 伪类。为了解决这个问题,我使用Son of Suckerfish。它从来没有让我失望,我有理由相信那些使用 IE6 的人不会阻塞 Javascript。
    【解决方案2】:

    问题在于 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 标记

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多