【问题标题】:Issue with nav sub menu not reappearing导航子菜单没有重新出现的问题
【发布时间】:2018-03-01 03:03:24
【问题描述】:

在 jQuery 设置 css 后,导航栏上的子菜单不显示。当我点击子菜单项时,容器被设置为display:none,但是当我再次将鼠标悬停在菜单项上时,子菜单不会显示。

.navmenu {
     height: 32px;
     list-style-type: none;
     margin: 0;
     padding: 0;
     text-align: justify;
}
 .navmenu li {
     display: inline-block;
     line-height: 2em;
}
 .navmenu li a {
     display: block;
     font-family: THCFontSemiBold;
     font-weight: bold;
     color: #f3ac3f;
     text-decoration: none;
}
 .navmenu li:hover {
     background: #6d1238;
}
 .navmenu li ul {
     margin: 13px 0px 0px 7px;
     padding: 0;
     display: inline-block;
     position: absolute;
     background: #510E2A;
     border: 2px solid #AA6180;
     list-style-type: none;
     box-shadow: 5px 10px 15px #000;
     z-index: 1;
     visibility: hidden;
}
 .navmenu li ul:before, .navmenu ul:after {
     content: '';
     height: 0px;
     width: 0px;
     position: absolute;
     top: -15px;
     left: 10px;
}
 .navmenu li ul:before {
     border-left: 15px solid transparent;
     border-right: 15px solid transparent;
     border-bottom: 15px solid #AA6180;
}
 .navmenu li ul:after {
     border-left: 15px solid transparent;
     border-right: 15px solid transparent;
     border-bottom: 15px solid #510E2A;
     top: -12px;
}
 .navmenu li ul li {
     line-height: 1.8em;
     display: block;
     text-align: left;
     margin: 8px;
}
 .navmenu li:hover ul {
     visibility: visible;
}
 .navmenu:after {
     content: '';
     display: inline-block;
     width: 100%;
     clear: both;
}
<script 
   src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="navd">
   <ul class="navmenu">
      <li><a href="#" id="mnu_Home">Home</a></li>
      <li><a href="#" id="mnu_aboutus">About Us</a></li>
      <li>
         <a href="#" id="mnu_services">Services</a>
         <ul>
            <li><a href="#" id="mnu_painmanagement">Pain Management</a></li>
            <li><a href="#" id="mnu_weightloss">Weight Loss</a></li>
            <li><a href="#" id="mnu_cosmetic">Cosmetic Procedure</a></li>
            <li><a href="#" id="mnu_vitamins">Vitamin Injections</a></li>
         </ul>
      </li>
      <li><a href="#" id="mnu_testimonials">Testimonials</a></li>
      <li><a href="#" id="mnu_patientforms">Patient Forms</a></li>
      <li><a href="#" id="mnu_contactus">Contact Us</a></li>
      <li><a href="#" id="mnu_patientportal">Patient Portal</a></li>
   </ul>
</div>

请告知我如何更正此问题或有关如何在桌面和移动设备上处理此菜单的任何其他建议(当您将鼠标悬停在容器外时,移动设备不会隐藏子菜单)。

My Fiddle is Here

【问题讨论】:

  • 点击功能的目的是什么?一旦你点击它,你就会隐藏它,然后会发生什么?
  • 问题是toggle给item添加了内联样式属性。内联样式优先于外部样式表样式。
  • @LinkinTed 点击功能主要用于移动设备。隐藏子菜单后,如果将鼠标悬停在主菜单项上,将无法再次显示它。
  • @LinkinTed 我试图通过设置.css("display","none") 来隐藏子菜单,但我得到了相同的结果。
  • 使用引导或复制影响此作业的行为(类和 js):w3schools.com/bootstrap/…

标签: jquery css


【解决方案1】:

如评论所述,toggle() 函数将内联 style="display:none" 添加到元素中。

您可以通过添加轻微超时功能来删除该属性来修复。

$("#mnu_services_drop a").on('click', function(e) {
  e.stopPropagation();
  $("#mnu_services_drop").toggle();
}).on('mouseup', function() {
  setTimeout(function() {
    $("#mnu_services_drop").removeAttr('style');
   }, 100);
});
.navmenu {
  background: #510E2A;
  height: 35px;
  margin: 0;
  padding: 0;
  list-style-type: none;
  text-align: justify;
}

.navmenu li {
  float: left;
}

.navmenu li a {
  display: block;
  padding: 9px 20px;
  text-decoration: none;
  font-family: THCFontSemiBold;
  color: #f3ac3f;
  font-weight: bold;
}

.navmenu li ul {
  margin: 0;
  padding: 0;
  list-style-type: none;
  position: relative;
  z-index: 1;
  background: green;
  top: -1px;
  left: 35px;
  display: none;
}

.navmenu li ul li {
  float: none;
  text-align: left;
}

.navmenu li ul a {
  display: block;
  text-align: left;
}
.navmenu li:hover ul {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="navmenu">
  <li><a href="#">Main 1</a></li>
  <li><a href="#">Main 2</a></li>
  <li>
    <a href="#">Main 3</a>
    <ul id="mnu_services_drop">
      <li><a href="#">Sub 1</a></li>
      <li><a href="#">Sub 2 </a></li>
      <li><a href="#">Sub 3</a></li>
      <li><a href="#">Sub 4</a></li>
    </ul>
  </li>
  <li><a href="#">Main 4</a></li>
  <li><a href="#">Main 5</a></li>
  <li><a href="#">Main 6</a></li>
  <li><a href="#">Main 7</a></li>
</ul>

【讨论】:

  • 似乎在台式机上运行良好,但在平板电脑上不正常。子菜单不会在平板电脑上隐藏。
  • 将我的代码重新整理为编辑,现在我在这里看不到它。我需要找到解决此问题的方法。
猜你喜欢
  • 2013-09-26
  • 2019-11-27
  • 1970-01-01
  • 2012-01-18
  • 2012-01-07
  • 1970-01-01
  • 2013-10-10
  • 2012-07-22
  • 2021-04-06
相关资源
最近更新 更多