CSS-стиль активной ссылки работает ненадолго, затем останавливается - PullRequest
0 голосов
/ 16 октября 2019

У меня есть следующие ссылки, которые есть в списке. Стилизация работает, когда на них нажимают, но когда страница загружается в местоположение href, стили не отображаются

$('.sidebar-nav li').on('click', function() {
  $('li').removeClass('hello');
  $(this).addClass('hello');
});
.hello {
  border-bottom: 2px solid blue !important;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="sidebar-nav">
  <li><i class="icon-home"></i><a href="{{route('dashboard')}}">Home</a></li>
  <li><i class="icon-user"></i><a href=""> Profile</a></li>
  <li><i class="icon-tag"></i><a href="">Tags</a>
    <ul id="task-ul">
      <li><a style="color:#e62a76" href=""><i class="icon-circle"></i>Personal</a></li>
      <li><a style="color:#774898" href=""><i class="icon-circle"></i> Meetings</a></li>
      <li><a style="color:turquoise" href=""><i class="icon-circle"></i>Email/call</a></li>
      <li><a style="color:#fbb901" href=""><i class="icon-circle"></i> Follow up</a></li>
    </ul>
  </li>
  <li><i class="icon-calendar"></i><a href="">Events</a></li>
  <li><i class="icon-bar-chart"></i><a href="">Productivity</a></li>
  <li><i class="icon-signout"></i><a href="">Logout</a></li>
</ul>
</div>
<!--end of sidebar-->

Ответы [ 3 ]

1 голос
/ 16 октября 2019

Нажав на ссылку, вы выполняете действие перехода на новый URL, который перезагружает страницу и, таким образом, сбрасывает все ваши стили.

В вашем конкретном случае я бы рассмотрел что-то вроде этого:

$('.sidebar-nav li a').on('click', function(e) {
  e.preventDefault();
  $('.sidebar-nav li a').removeClass('hello');
  $(this).addClass('hello');
});

Поместив обработчик события в тег a, вы можете запустить preventDefault() для события, и это остановит переход страницы на новый URL-адрес и перезагрузку.

Если вы хотите изменить класс на li still, а не на a, то вы можете просто выполнить некоторый обход DOM для доступа к li, который вы хотите. Что-то вроде $(this).parent('li').addClass(), думаю, сделает это.

1 голос
/ 16 октября 2019

Вы не должны добавлять классы CSS программно, используя jquery / javascript для активной ссылки. Вы можете сделать это, просто используя css:

.sidebar-nav li a: active {border-bottom: 2px solid blue! Важный;}

Попробуйте и дайте мне знать, если это работает.

0 голосов
/ 16 октября 2019

Я думаю, что вы используете каркас Laravel, поэтому вместо использования jquery для добавления Class hello вы можете попробовать это

    @php
        $current_route_name = Route::currentRouteName();
    @endphp

    <ul class="sidebar-nav">
        <li <?php  if($current_route_name  == 'dashboard') echo 'class="hello"' ?> ><i class="icon-home"></i><a href="{{ route('dashboard') }}">Home</a></li>
        <li><i class="icon-user"></i><a href=""> Profile</a></li>
        <li><i class="icon-tag"></i><a href="">Tags</a>
            <ul id="task-ul">
                <li ><a style="color:#e62a76" href=""><i class="icon-circle"></i>Personal</a></li>
                <li><a style="color:#774898" href=""><i class="icon-circle"></i> Meetings</a></li>
                <li ><a style="color:turquoise" href=""><i class="icon-circle"></i>Email/call</a></li>
                <li><a style="color:#fbb901" href=""><i class="icon-circle"></i> Follow up</a></li>
            </ul>
        </li>
        <li><i class="icon-calendar"></i><a href="">Events</a></li>
        <li><i class="icon-bar-chart"></i><a href="">Productivity</a></li>
        <li><i class="icon-signout"></i><a href="">Logout</a></li>
    </ul>

Он получит текущее имя маршрута и совпадет с именем маршрута якоря и добавит класс на основена этом маршруте

...