【问题标题】:During hover on parent element, show child (dropdown nav)在父元素悬停期间,显示子元素(下拉导航)
【发布时间】:2013-01-20 06:15:29
【问题描述】:

我正在尝试制作一个愚蠢的水平导航栏,其中包含一些项目的下拉菜单。我决定这样做的方法是将下拉列表放在 div 标签中。这很容易改变,我只是不喜欢在 html 方面过重。

基本上,当您将鼠标悬停在父元素上时,我只想让我的下拉菜单起作用。额外的 css 将被用来使它更漂亮并且定位更好。

这是我的 js:

var dropdown = $('.dropdown');
var parent = dropdown.parent();
$(parent).hover(
    function () {
        dropdown.css('display', 'block');
    }
);

这是我的 CSS:

div.nav {
    text-align: center;
}
div.nav > ul > li {
    margin-top: 15px;
    text-align: center;
    font-size: 1.25em;
}
div.nav > ul > li {
    display: inline-block;
    list-style-type: none;
}
div.nav a {
    padding: 1em;
}
div.dropdown {
    display: none;
    background-color: black;
    position: absolute;
}

这是我的html:

<div class="nav">
    <ul>
        <li><a href="index.html">Home</a></li>
        <li>
            <a href="game.html">Sample Game</a>
            <div class="dropdown">
                <a href="index.html">About it</a>
                <br>
                <a href="index.html">Game</a>
            </div>
        </li>
        <li><a href="solutions.html">TP Solutions</a></li>
        <li><a href="projects.html">Projects</a></li>
        <li><a href="contact.html">Contact Me</a></li>
    </ul>
<div class="clear"></div>

【问题讨论】:

  • 我知道,我实际上让它与 css 一起使用,但由于我必须将子元素的大小调整为与父元素相同的大小,我想将其切换到 js。如果不对其进行硬编码,我无法确定 css 中的大小,并且 width = 100% 不起作用

标签: javascript jquery css drop-down-menu navigation


【解决方案1】:

您不应该使用“parent”作为变量名,因为它是一个保留字。

$(document).ready(function() {
    var $dropdown = $('.dropdown'),
        $parent = $dropdown.parent();
    $parent.on("mouseover",
        function () {
            $dropdown.css('display', 'block');
        }
    );
    $parent.on("mouseout",
        function () {
            $dropdown.css('display', 'none');
        }
    );
});

【讨论】:

  • 鼠标悬停和悬停有什么区别?
  • @Tmp 看看你用的是jquery版本1.9然后不要用.hover
  • 我刚试过这个,它对我有用。你确定你没有在你的 DOM 加载之前调用 JS 吗?
  • 刚刚对我的答案进行了编辑,以确保它在 DOM 加载后运行
  • 你应该添加一个 onmouseout 事件让它消失
【解决方案2】:

根据订单必须这样做:

  • 先添加一个jQuery插件
  • 然后添加你的脚本

所以顺序是这样的:

<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js'>
</script>

<script>
   $(function(){
      var dropdown = $('.dropdown');
      var parent = dropdown.parent();
      $(parent).hover(function () {
         dropdown.css('display', 'block');
      });
   });
</script>

【讨论】:

  • 对不起,我没有包含那部分代码,但我先导入 jquery。不过,您的代码似乎对我有用,谢谢!真的不知道为什么......
【解决方案3】:

请尝试以下代码。

    $(".nav").on("mouseenter","li",function(){
        $(this).find(".dropdown").show();
    });
    $(".nav").on("mouseleave","li",function(){
        $(this).find(".dropdown").hide();
    });

在您的代码“ dropdown.parent(); ” -> 这将引用所有具有子下拉菜单的父母并显示菜单。我们需要引用当前悬停父级。请检查以下链接中的工作示例。

http://jsfiddle.net/renjith/wX48f/

【讨论】:

    【解决方案4】:

    有很多好的解决方案可以使用 jQuery 和 CSS 来显示下拉菜单。所以你不需要重新发明轮子。这里有一些examples,您也许可以找到满足您需求的。

    【讨论】:

    • 如果有些人真的想学习而不是盲目复制别人的代码怎么办?
    • 同意。但有些例子非常简单。所以自己可以作为很好的教程。看看这个one,你就会明白我的意思。 :)
    • 我确实借用了一个简单的css解决方案,但是这个js很简单,应该可以工作
    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2011-11-05
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多