Как изменить тему bootstrap при нажатии на ссылку - PullRequest
0 голосов
/ 09 мая 2020

Я хочу переключаться между темой bootstrap при нажатии ссылки с названием этой темы, вот это html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport"
    content="width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=1.0, user-scalable=no">
  <title>Theme Changer</title>
  <meta name="description" content="" />
  <meta name="keywords" content="">
  <link id="theme" rel="stylesheet" href="css/bootstrap.css" />
</head>
<body>
    <nav class="navbar navbar-expand-sm bg-light navbar-light">
      <ul class="navbar-nav">
        <li class="nav-item active">
          <a class="nav-link" href="#">Active</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Link</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Link</a>
        </li>
        <li class="nav-item">
          <a class="nav-link disabled" href="#">Disabled</a>
        </li>
      </ul>
    </nav>
    <div class="row">
        <div class="col-md-6">
            <a id="Cyborg" href="" class="btn btn-block">Cyborg</a>
        </div>
        <div class="col-md-6">
            <a id="Lux" href="" class="btn btn-block">Lux</a>
        </div>
    </div>
         <footer>
            <p>Theme Changer</p>
        </footer>
 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script type="text/javascript" src="js/bootstrap.min.js"></script>
  <script>
$(document).ready(function () {
    $('#Cyborg').click(function () {
        $('#theme').attr('href', 'css/bootstrapcyborg.css');
    });
    $('#Lux').click(function () {
        $('#theme').attr('href', 'css/bootstraplux.css');
    });
});
  </script>
</body>
</html>

Я создал ссылку для начальной загрузки страницы css, а затем щелкнув любую ссылку, я заменяю исходный атрибут href на назначенный в jquery. Кто-нибудь может подсказать, где я ошибаюсь.

1 Ответ

0 голосов
/ 09 мая 2020

Я могу придумать несколько решений для этого, но я бы порекомендовал первое.

  1. Вместо тегов a используйте button без атрибута href.
<div class="col-md-6">
    <button id="Cyborg" class="btn btn-block">Cyborg</button>
</div>
<div class="col-md-6">
    <button id="Lux" class="btn btn-block">Lux</button>
</div>
Добавьте href="javascript:void(0)" или href="#" к своим тегам a
<div class="col-md-6">
   <a id="Cyborg" href="javascript:void(0)" class="btn btn-block">Cyborg</a>
</div>
<div class="col-md-6">
   <a id="Lux" href="javascript:void(0)" class="btn btn-block">Lux</a>
</div>

OR

<div class="col-md-6">
   <a id="Cyborg" href="#" class="btn btn-block">Cyborg</a>
</div>
<div class="col-md-6">
   <a id="Lux" href="#" class="btn btn-block">Lux</a>
</div>

Но имейте в виду, что, имея '#' как href вернет вас к началу страницы при нажатии a.

А также после https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a это плохая практика

Элементы привязки часто используются как поддельные кнопки, устанавливая для их href значение # или javascript: void (0), чтобы предотвратить обновление страницы, а затем прослушивать их события щелчка.

Эти фиктивные значения href вызывают неожиданное поведение при копировании / перетаскивание ссылок, открытие ссылок в новой вкладке / окне, создание закладок или когда JavaScript загружается, возникают ошибки или отключено. Они также передают неверную семантику вспомогательным технологиям, таким как программы чтения с экрана.

Используйте вместо. В общем, вы должны использовать только гиперссылку для перехода на реальный URL.

Запретить запуск действия браузера по умолчанию при нажатии
$('#Cyborg').click(function (e) {
    e.preventDefault();
    $('#theme').attr('href', 'css/bootstrapcyborg.css');
});
$('#Lux').click(function (e) {
    e.preventDefault();
    $('#theme').attr('href', 'css/bootstraplux.css');
});
Полностью удалить атрибут href - тогда вам может потребоваться стилизовать теги a по-своему, потому что браузер удалит стиль привязки

Объяснение: Потому что #Cyborg или #Lux - это элементы привязки, их поведение браузера по умолчанию при нажатии на инициирует переход по своему URL-адресу , потому что у вас есть пустая строка внутри href браузер просто перезагружает страницу. Затем браузер возвращается в состояние после первой загрузки, и вы не видите никакого эффекта.

Надеюсь, я правильно вас понял и это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...