我正在创建一个Bootstrap网站,并且我想要一个按钮来打开“黑暗模式”。我已经设法对导航栏执行此操作,这很好,但是在多次单击后按钮本身不会更改。
var darkMode = false;
function toggleDarkMode() {
if (!darkMode) {
darkMode = true;
$("#darkMode").removeClass("btn-dark").addClass("btn-light").text("Light Mode");
$("nav").removeClass("navbar-light bg-light").addClass("navbar-dark bg-dark");
} else {
darkMode = false;
$("#darKMode").removeClass("btn-light").addClass("btn-dark").text("Dark Mode");
$("nav").removeClass("navbar-dark bg-dark").addClass("navbar-light bg-light");
}
}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<title>Home</title>
</head>
<body>
<nav class="navbar sticky-top navbar-light bg-light navbar-expand-lg">
<a class="navbar-brand" href="#">Jack</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="#">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Tools</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item active" href="#">Space Invaders</a>
</div>
</ul>
<ul class="nav justify-content-end">
<li class="nav-item">
<button class="btn btn-dark" type="button" onclick="toggleDarkMode()" id="darkMode">Dark Mode</button>
</ul>
</div>
</nav>
<div class="container">
<div class="jumbotron vertical-center bg-light">
<h1 class="display-4">Space Invaders</h1>
<p class="lead">I made a game of Space Invaders recently. You can play it right here, on my website!</p>
<hr class="my-4" />
<a class="btn btn-success btn-lg" href="#" role="button">Play!</a>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
</body>
</html>
如果以全屏模式运行上面的代码段并多次按下按钮,您会看到导航栏会更改颜色,按钮会更改颜色,并且按钮中的文本也会更改。但是,单击一次后,文本将进入“灯光模式”,并且不会更改,颜色也不会更改,但是导航栏仍然会更改。
为什么会这样?在我的JavaScript / jQuery代码中,您可以看到所做的更改在应用到导航栏之前已应用到按钮,但是在第一次按下后按钮没有更改。
为什么会这样?我该如何解决?
答案 0 :(得分:1)
您在以下语句中的选择器不正确:
$("#darKMode").removeClass("btn-light").addClass("btn-dark").text("Dark Mode");
将其更改为:
$("#darkMode").removeClass("btn-light").addClass("btn-dark").text("Dark Mode");