【问题标题】:Menu item doesn't open菜单项打不开
【发布时间】:2021-06-12 13:56:53
【问题描述】:

我找到了一个简单的下拉菜单,对我来说效果很好,但只打开了子项链接。 当我点击“主页”时,没有任何反应(它应该打开谷歌页面),当我点击“info2”时,谷歌将打开。

我认为它与 de .js 文件有关,但我只是没有看到它。 希望有人能用一个简单的技巧帮助我。

$(document).ready(function(){
  $("#nav > li > a").on("click", function(e){
    if($(this).parent().has("ul")) {
      e.preventDefault();
    }
    
    if(!$(this).hasClass("open")) {
      // hide any open menus and remove all other classes
      $("#nav li ul").slideUp(350);
      $("#nav li a").removeClass("open");
      
      // open our new menu and add the open class
      $(this).next("ul").slideDown(350);
      $(this).addClass("open");
    }
    
    else if($(this).hasClass("open")) {
      $(this).removeClass("open");
      $(this).next("ul").slideUp(350);
    }
  });
});
ul, li, td {
  padding: 0;
  border: 0;
  vertical-align: baseline;
  outline: none;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

ol, ul { list-style: none; }

table { border-collapse: collapse; border-spacing: 0; }

/* nav menu styles */
#nav { 
  display: block; 
  width: 280px; 
  margin: 0 auto; 
}

#nav li {font-size:19px; text-align:center;}

#nav > li > a { 
  display: block; 
  padding: 16px 18px;
  color: #fff;
  text-decoration: none;
  border-bottom: 1px solid #212121;
  background-color: #0069b3;
}
#nav > li > a:hover, #nav > li > a.open { 
  color: #fff;
  border-bottom-color: #384f76;
  background-color: #083562;
}

#nav li ul { display: none; background: #083562; }

#nav li ul li a { 
  display: block; 
  background: none;
  padding: 10px 0px;
  text-decoration: none;
  color: #fff;
}
#nav li ul li a:hover {
  background: #014f86;
}
<!doctype html>

<html lang="en-US">
<head>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
</head>

<body>
  <div id="w">

    
    <nav>
      <ul id="nav">
        <li><a href="http://www.google.com">Home</a></li>
        <li><a href="#">Info</a>
          <ul>
            <li><a href="#">info2</a></li>
            <li><a href="#">info3</a></li>
            
          </ul>
        </li>

    </nav>
  </div>
</body>
</html>

【问题讨论】:

  • if($(this).parent().has("ul")) { e.preventDefault();} 这总是正确的。因此,链接不会被打开
  • @SimoneRossaini 既不正确又无效的 HTML。
  • 所以像 OP 这样使用 html 不好吗?因为在我的系统中工作。
  • @RoryMcCrossan developer.mozilla.org/en-US/docs/Web/HTML/Element/li &lt;a&gt;&lt;li&gt; 是允许的。
  • 是的,我的意思是&lt;li&gt;&lt;a&gt;&lt;/a&gt;&lt;/li&gt;

标签: javascript jquery css drop-down-menu


【解决方案1】:

看起来 .has() 方法不能以这种方式使用,因为不是返回布尔值,而是 jQuery 对象。改变这个:

if($(this).parent().has("ul")) {
    e.preventDefault();
} 

对此,如果它对您有帮助,请告诉我:

if($(this).parent().has("ul").length === 1) {
    e.preventDefault();
} 

【讨论】:

  • 我知道差不多 2 个月前这个问题已经解决了,但是你/有人可以帮我看看如何在单击子菜单按钮/打开页面时让这个菜单不再关闭吗?
  • 我认为您可以尝试删除removeClass("open")。如果没有帮助,请提供您的代码的实际示例。 Codesandbox 或类似平台将是这个的好地方。
  • 抱歉反应迟了。这是什么东西吗? codepen.io/Jorus/pen/LYbagEg 或者你不能通过运行代码片段得到它?希望你仍然可以帮助我;)。慢慢来。
  • 不确定“单击子菜单按钮时不再关闭”是什么意思。能否请您逐步解释一下单击子菜单后会发生什么?
  • 菜单现在正在工作,如果您单击子菜单,则会打开一个新页面并且菜单正在关闭。所以子菜单按钮被隐藏了。我希望它们在页面打开或刷新时保持打开/可见,这是完全一样的。希望你现在能更好地理解我:P。否则,如果您愿意,可以私信我,我会向您发送它的全部内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多