【问题标题】:how to add active class on click and prevent the submenu from sliding up如何在单击时添加活动类并防止子菜单向上滑动
【发布时间】:2020-04-16 01:28:19
【问题描述】:

我正在尝试添加/删除活动类并防止我的子菜单在活动时向上滑动。如果我单击特定选项卡,它应该处于活动状态,直到我切换到另一个选项卡。已尝试使用 addclass/removeclass,但 html onclick 没有变化。任何人都可以建议如何实现这一目标。

when submenu 'akun belanja' is active

当我点击任何子菜单时,它会移除活动状态并向上滑动,如下所示:

clicked 'daftar akun belanja'

我的侧边栏:

<nav id="sidebar">
<div class="sidebar-header">
    <div class="p-b-13">
        <img src="{{url('/asset/login/images/itk.png')}}" alt="itk" class="center">
    </div>
    <h6 align="center">Sistem Informasi</h6>
    <h3 class="h3_sidebar" align="center" style="color:#0067B2">MANAJEMEN</h3>
</div>

<ul class="list-unstyled components">
    <li>
        <a href="#homeSubmenu" data-toggle="collapse" aria-expanded="false">SPJ dan LPJ <i class="fa fa-caret-down float-right mr-2"></i></a>
        <ul class="collapse list-unstyled" id="homeSubmenu">
            <li>
                <a href="{{url('/keuangan/spj/')}}">Surat Pertanggung Jawaban</a>
            </li>
            <li>   
                <a href="#">Laporan Pertanggung Jawaban</a>
            </li>

        </ul>
    </li>

    <li>
        <a href="#pageSubmenu" data-toggle="collapse" aria-expanded="false">Akun Belanja  <i class="fa fa-caret-down float-right mr-2"></i></a>
        <ul class="collapse list-unstyled" id="pageSubmenu">
            <li>
                <a href="{{url('/keuangan/akunbelanja/')}}">Daftar Akun Belanja</a>
            </li>
            <li>
                <a href="#">Panduan Akun Belanja</a>
            </li>
        </ul>
    </li>

    <li>
        <a href="#">Help</a>
    </li>

    <li>
        <a href="#">Contact</a>
    </li>
</ul>
</nav>

js:

<script>
        $(document).ready(function () {
            $(".ul .a").on("click", function () {
                $(".ul").find(".active").removeClass("active");
                $(this).addClass("active");
            });
        });
    </script>

【问题讨论】:

  • 你在使用 angularJS?
  • @fidelcastro 不,这基本上是我在 laravel 项目中的观点:/

标签: javascript html css


【解决方案1】:

修复 jQuery 函数:

将所有 .ul 更新为 ul 并且将 .a 更新为 a 因为它不是类,它是 TAG。

<script>
        $(document).ready(function () {
            $("ul a").on("click", function () {
                $("ul").find(".active").removeClass("active");
                $(this).addClass("active");
            });
        });
    </script>


工作样本如下

如果您要使用带有下拉功能的完美示例侧导航,请参考下面的代码。它应该有效。它在 JavaScript 中。如果需要,可以与 jQuery 合并。

/* Loop through all dropdown buttons to toggle between hiding and showing its dropdown content - This should avoid conflict. */
var dropdown = document.getElementsByClassName("dropdown-btn");
var i;

for (i = 0; i < dropdown.length; i++) {
  dropdown[i].addEventListener("click", function() {
  this.classList.toggle("active");
  var dropdownContent = this.nextElementSibling;
  if (dropdownContent.style.display === "block") {
  dropdownContent.style.display = "none";
  } else {
  dropdownContent.style.display = "block";
  }
  });
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
body {
  font-family: "Lato", sans-serif;
}

/* Fixed sidenav, full height */
.sidenav {
  height: 100%;
  width: 200px;
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  background-color: #111;
  overflow-x: hidden;
  padding-top: 20px;
}

/* Style the sidenav links and the dropdown button */
.sidenav a, .dropdown-btn {
  padding: 6px 8px 6px 16px;
  text-decoration: none;
  font-size: 20px;
  color: #818181;
  display: block;
  border: none;
  background: none;
  width: 100%;
  text-align: left;
  cursor: pointer;
  outline: none;
}

/* On mouse-over */
.sidenav a:hover, .dropdown-btn:hover {
  color: #f1f1f1;
}

/* Main content */
.main {
  margin-left: 200px; /* Same as the width of the sidenav */
  font-size: 20px; /* Increased text to enable scrolling */
  padding: 0px 10px;
}

/* Add an active class to the active dropdown button */
.active {
  background-color: orange;
  color: white;
}

/* Dropdown container (hidden by default). Optional: add a lighter background color and some left padding to change the design of the dropdown content */
.dropdown-container {
  display: none;
  background-color: #262626;
  padding-left: 8px;
}

/* Optional: Style the caret down icon */
.fa-caret-down {
  float: right;
  padding-right: 8px;
}

/* Some media queries for responsiveness */
@media screen and (max-height: 450px) {
  .sidenav {padding-top: 15px;}
  .sidenav a {font-size: 18px;}
}
</style>
</head>
<body>

<div class="sidenav">
  <a href="#about">About</a>
  <a href="#services">Services</a>
  <a href="#clients">Clients</a>
  <a href="#contact">Contact</a>
  <button class="dropdown-btn">Dropdown 
    <i class="fa fa-caret-down"></i>
  </button>
  <div class="dropdown-container">
    <a href="#">Link 1</a>
    <a href="#">Link 2</a>
    <a href="#">Link 3</a>
  </div>
  <a href="#contact">Search</a>
</div>

<div class="main">
  <h2>Sidebar Dropdown</h2>
  <p>Click on the dropdown button to open the dropdown menu inside the side navigation.</p>
  <p>This sidebar is of full height (100%) and always shown.</p>
  <p>Some random text..</p>
</div>



</body>
</html>

【讨论】:

    【解决方案2】:

    这里有几件事:

    • 代码中缺少您的 CSS,因此我必须做出一些假设
    • 当你在 jQuery 中导航时,你使用.ul,而你应该使用ul.aa 类似。
    • 我已在源代码中记录。

    $(document).ready(function() {
      $("ul li > a").on("click", function() {
        $("ul").find(".active").removeClass("active");
        $(this).addClass("active");
        $("ul").find("ul").css("display", "none"); /* close submenu */
        $(this).next("ul").css("display", "block"); /*display submenu */
      });
    });
    /* default link color */
    a {
      color: purple;
    }
    /* color for active link */
    a.active {
      color: red;
    }
    /* hide submenu's by default */
    ul>li>ul {
      display: none;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <nav id="sidebar">
      <div class="sidebar-header">
        <div class="p-b-13">
          <img src="" alt="itk" class="center">
        </div>
        <h6 align="center">Sistem Informasi</h6>
        <h3 class="h3_sidebar" align="center" style="color:#0067B2">MANAJEMEN</h3>
      </div>
    
      <ul class="list-unstyled components">
        <li>
          <a href="#homeSubmenu" data-toggle="collapse" aria-expanded="false">SPJ dan LPJ <i class="fa fa-caret-down float-right mr-2"></i></a>
          <ul class="collapse list-unstyled" id="homeSubmenu">
            <li>
              <a href="#">Surat Pertanggung Jawaban</a>
            </li>
            <li>
              <a href="#">Laporan Pertanggung Jawaban</a>
            </li>
    
          </ul>
        </li>
    
        <li>
          <a href="#pageSubmenu" data-toggle="collapse" aria-expanded="false">Akun Belanja  <i class="fa fa-caret-down float-right mr-2"></i></a>
          <ul class="collapse list-unstyled" id="pageSubmenu">
            <li>
              <a href="#">Daftar Akun Belanja</a>
            </li>
            <li>
              <a href="#">Panduan Akun Belanja</a>
            </li>
          </ul>
        </li>
    
        <li>
          <a href="#">Help</a>
        </li>
    
        <li>
          <a href="#">Contact</a>
        </li>
      </ul>
    </nav>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多