【问题标题】:javascript hover function for submenu子菜单的javascript悬停功能
【发布时间】:2013-02-24 21:04:45
【问题描述】:

我在尝试理解 javascript 方面还很陌生,我一直在收集多个示例,试图找出我做错了什么,但无法使其正常工作。在某一时刻,我曾使用过 onmouseover/mouseout,但它只适用于其中一个菜单。

我确信这是我忽略的一些简单的事情,但我们将不胜感激。

http://jsfiddle.net/N3TyT/

jQuery(document).ready(function($) {
$('#top-menu').hover(
  function () {
    $('#submenu').show(active);
  },
  function () {
    $('#submenu').hide(non-active);
  }
);
});

<ul id="menu" class="nav-menu">
    <li>Home</li>
    <li id="top-menu"><a href="#">About Us</a>
    </li>
    <ul id="submenu" class="sub-menu non-active">
        <li>US</li>
        <li>Our Style</li>
        <li>The Experience</li>
    </ul>
    <li id="top-menu"><a href="#">Galleries</a>
    </li>
    <ul id="submenu" class="sub-menu non-active">
        <li>Weddings</li>
        <li>Engagements</li>
        <li>Featured Weddings</li>
    </ul>
    <li id="top-menu"><a href="#">The Details</a>
    </li>
    <ul id="submenu" class="sub-menu non-active">
        <li>Investment</li>
        <li>Press and Awards</li>
        <li>Testimonials</li>
    </ul>
    <li>FAQ</li>
    <li>Contact</li>
    <li>The Blog</li>
</ul>

.nav-menu {
    list-style-type:none;
    text-align:center;
    text-transform:uppercase;
    font-weight:bold;
    font: 24px'Playfair Display', Georgia, serif;
}
.navmenu ul li {
    margin:30px;
}
.non-active {
    display:none;
}
.active {
    display:inline;
}

【问题讨论】:

  • 第一步,在控制台检查错误。
  • 请您简单地告诉我们您想要达到的目标吗?

标签: javascript drop-down-menu submenu


【解决方案1】:

您使用的隐藏和显示错误。 http://api.jquery.com/show/ http://api.jquery.com/hide/

http://jsfiddle.net/eXKV9/

$('#top-menu').hover(
  function () {
    $('#submenu').show();
  },
  function () {
    $('#submenu').hide();
  }
);

【讨论】:

    【解决方案2】:

    id 必须是唯一的。如果您有多个具有相同id 的元素,则执行 $('#top-menu') 时 jquery 不会检索所有元素,它只会找到与选择器匹配的第一个元素。

    【讨论】:

      【解决方案3】:

      我更新了你的作品。这是要建立的吗?

      $('#top-menu').mouseover(function(){
          $('#submenu').addClass('active');
      });
      $('#top-menu').mouseout(function(){
          $('#submenu').removeClass('active');
      });
      

      JSFiddle Demo

      【讨论】:

      • 谢谢,这是我需要的解决方案。其他的工作,但我最终希望菜单的高度保持不变,即使下拉菜单被激活,所以我需要一个可以让我修改类的代码。了解我只需要确保唯一的 id 可以自始至终工作。谢谢
      • (-1) 代码在第一个之后的下拉列表中不起作用,并且答案需要格式化。请查看格式指南。我更新了帖子以显示正确的格式。
      【解决方案4】:

      它没有回答您的具体问题,但使用 css 可以轻松实现相同的行为。这样您就不必依赖打开 javascript 来进行标准菜单访问。

      ul.menu li ul {
        display: none;
      }
      
      ul.menu li:hover ul {
        display: block;
        position: relative;
      }
      <ul class="menu">
        <li><a href="#">Home</a></li>
        <li>
          <a href="#">Galleries</a>
          <ul>
            <li>Gallery #1</li>
            <li>Gallery #2</li>
          </ul>
        </li>
        <li>
          <a href="#">Albums</a>
          <ul>
            <li>Album #1</li>
            <li>Album #2</li>
          </ul>
        </li>
      </ul>

      查看jsFiddle

      【讨论】:

      • 好话。添加一些 CSS3-Transitions 以获得额外的奖励点:-)
      【解决方案5】:

      我们需要稍微修改一下 HTML。 ID 在一个页面上只使用一次。类是相似的,但可以应用于任意数量的元素。我们还想将我们的子菜单嵌套在顶部菜单下。这样关联就更清楚了。

      <li class="top-menu"><a href="#">About Us</a>
          <ul class="sub-menu non-active">
              <li>Ashley + David</li>
              <li>Our Style</li>
              <li>The Experience</li>
          </ul>
      </li>
      

      我们要指定要显示或隐藏的嵌套子菜单。 $(this) 指的是悬停在上面的顶部菜单。

      $('.top-menu').hover(
        function () {
          $(this).find('.sub-menu').show("slow");
        },
        function () {
          $(this).find('.sub-menu').hide("slow");
        }
      );
      

      demo

      【讨论】:

      • 这会添加不必要的动画,并且下拉菜单最终无法点击,因为它会消失。
      • @user2151084,谢谢。我注意到有些不对劲。现在似乎通​​过嵌套元素并稍微更改 jQuery 使用来修复它。
      猜你喜欢
      • 1970-01-01
      • 2013-04-08
      • 2013-06-24
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多