链接了jQuery代码的Bootstrap按钮在多次单击后不会更新按钮文本

时间:2018-11-08 05:22:01

标签: javascript jquery html css twitter-bootstrap

我正在创建一个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代码中,您可以看到所做的更改在应用到导航栏之前已应用到按钮,但是在第一次按下后按钮没有更改。

为什么会这样?我该如何解决?

1 个答案:

答案 0 :(得分:1)

您在以下语句中的选择器不正确:

$("#darKMode").removeClass("btn-light").addClass("btn-dark").text("Dark Mode");

将其更改为:

$("#darkMode").removeClass("btn-light").addClass("btn-dark").text("Dark Mode");