javascript - 如何在单击时添加活动类并防止子菜单向上滑动
问题描述
我正在尝试添加/删除活动类并防止我的子菜单在活动时向上滑动。如果我单击特定选项卡,它应该处于活动状态,直到我切换到另一个选项卡。已尝试使用 addclass/removeclass,但 html onclick 没有变化。任何人都可以建议如何实现这一目标。
当我单击任何子菜单时,它将删除活动状态并向上滑动,如下所示:
我的侧边栏:
<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>
解决方案
修复您的 jQuery 函数:
将所有更新.ul
为ul
AND .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>
推荐阅读
- sql - SQL Select Date between Error conversion failed
- java - 如何使用 Guice + Jersey + servlet 将 Swagger 集成到 Java 项目中并自动生成 REST API 文档
- android - Kotlin 中的 DatePicker 显示错误的月份
- c# - GridView 事件未在 asp.net 中触发?
- python - 使用 matplotlib 缺少第一个 x 标签
- android - zxing QRscanner 的不同结果
- java - JUnit 测试返回原始类型
- android - 程序类型已经存在:org.apache.commons.logging.Log
- r - 获取函数的准确输入文本
- ios - 选择器视图函数未调用