Проблема jQuery с нацеливанием на выбранный элемент при наличии нескольких его экземпляров

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть несколько экземпляров в pills, и я пытаюсь добавить класс к тому, на который был нажат, и только к этому.

Вот пример:

Экземпляр один

 <ul class="nav nav-pills">
  <li><a data-toggle="tab" href="#contentone" class="active" onclick="toggleActive($event)">One</a></li>
  <li><a data-toggle="tab" href="#contenttwo" onclick="toggleActive($event)">Two</a></li>
</ul>
  

Второй экземпляр

 <ul class="nav nav-pills">
  <li><a data-toggle="tab" href="#contentone" class="active" onclick="toggleActive($event)">One</a></li>
  <li><a data-toggle="tab" href="#contenttwo" onclick="toggleActive($event)">Two</a></li>
</ul>
  

У меня есть эта функция:

 toggleActive(this) {
    $(this).addClass('active');
}
  

По сути, происходит то, что то, что я нажимаю на экземпляр второго (например), изменяет таблетку в первом.

Мне это нужно только для того, чтобы повлиять на выбранный элемент, а не на другой.

Как я могу это сделать?

Ответ №1:

Если вы не определили это где-то на глобальном уровне, $event будет undefined . Даже если вы определили его, оно не будет содержать никакой полезной информации о событии, вызванном в соответствии с ожиданиями вашего кода, следовательно $(this) , это не то, что вы ожидаете.

Чтобы исправить это и улучшить код, полностью прекратите использовать on* атрибуты события и ненавязчиво прикрепите свои обработчики событий. Поскольку вы уже используете jQuery, вот как вы это делаете:

 $('.nav-pills li a').click(function() {
  $(this).toggleClass('active'); // note toggleClass here, to allow selection/deselection
});  
 .active {
  background-color: #C00;
  color: #FFF;
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="nav nav-pills">
  <li><a data-toggle="tab" href="#contentone" class="active">One</a></li>
  <li><a data-toggle="tab" href="#contenttwo">Two</a></li>
</ul>

<ul class="nav nav-pills">
  <li><a data-toggle="tab" href="#contentone" class="active">One</a></li>
  <li><a data-toggle="tab" href="#contenttwo">Two</a></li>
</ul>  

Ответ №2:

Если вы хотите использовать функцию toggleActive()

    $(function () {
        toggleActive = function (e) {
            $("a").removeClass('active')
            $(e).addClass('active');
        };
    });  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="nav nav-pills">
    <li><a data-toggle="tab" href="#contentone" class="active" onclick="toggleActive(this)">One</a></li>
    <li><a data-toggle="tab" href="#contenttwo" onclick="toggleActive(this)">Two</a></li>
</ul>  

вы можете сначала удалить весь активный класс, а затем добавить активный класс к выбранному элементу