Сделать вкладку активным в Bootstrap
Я использую Django и интегрированный Bootstrap с Django. Вот мой код HTML для панели навигации:
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li ><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Games <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="#">RacingDNA</a></li>
<li><a href="#">Skater Game</a></li>
</ul>
</li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
Я также написал CSS для активной панели навигации. Здесь активна только одна панель навигации. Я хочу сделать активную панель навигации нажатой и, таким образом, применить мой CSS. Мой CSS работает идеально для активной панели навигации и для этой ситуации только для одного.
Я googled и нашел решение для добавления этого jQuery:
$('.nav.navbar-nav > li').on('click', function (e) {
e.preventDefault();
$('.nav.navbar-nav > li').removeClass('active');
$(this).addClass('active');
});
Теперь вот где я застрял. Я не знаю, где написать этот jQuery.
Я поместил этот файл в папку static/js
и назвал этот код nav-bar.js
. Однако улучшения нет. Где я ошибаюсь и где я совершаю ошибки?
Ответы
Ответ 1
Это решение не работает, если атрибут href ваших ссылок будет отличаться от href="#"
. Зачем? Просто потому, что каждый клик по ссылке запускает запрос на сервер. В вашем JS-коде вы добавляете метод preventDefault(), чтобы избежать этого базового поведения, но я думаю, что это не ваша цель для этой цели, не так ли?
Чтобы справиться с такой функцией, вы можете обновить свой код шаблона, добавив что-то вроде этого:
base.html
<div class="collapse navbar-collapse" id="tn-navbar-collapse">
<ul class="nav navbar-nav">
<li class="{% if nbar == 'home' %}active{% endif %}">
<a href="/">HOME</a>
</li>
...
</ul>
</div>
views.py
def your_view(request):
...
return render(request, 'yourtemplate.html', {'nbar': 'home'})
Таким образом, вам не нужно управлять этой функцией с помощью javascript.
Ответ 2
Если вы не хотите отправлять какой-либо дополнительный контекст из представлений, вы можете обрабатывать его следующим образом с помощью resolver_match:
<li {% if request.resolver_match.url_name == 'home' %}class="active"{% endif %}>
<a href="/">HOME</a>
</li>
где "home" - это имя, присвоенное вашему шаблону url для/(возможно, '^$'
) в вашем urls.py.
Поэтому, очевидно, чтобы использовать это, вам нужно назвать все ваши шаблоны url, что в любом случае является хорошей практикой.
Ответ 3
вы можете просто добавить jquery между
<script type="text/javascript">
</script>
в html
Ответ 4
После добавления JavaScript-геймера в ваш шаблон code_here, вы должны убедиться, что у вас есть аналогичные настройки в вашем файле CSS, чтобы сделать работу JavaScript.
.navbar-nav > li.active > a {
color: #d74b4b;
background: transparent;
border-bottom: none;
}