Задать вопрос
Cheizer
@Cheizer

Как в списке по клику на элемент, добавить класс только ему, а у остальных убрать?

Друзья, простой вопрос знатокам JQUERY.
Есть мобильное меню, по клику на элементе, присваивается класс .mobile-submenu-active и вложенный список раскрывается, а другой список ЕСЛИ ОТКРЫТ сворачивается. НО происходит какая то ерунда, не могу удалить класс .mobile-submenu-active в уже открытых списках, когда кликаю по другому пункту, и происходит ерунда .mobile-submenu-active начинает то добавляться то появляться наоборот, когда свернул список, я так понимаю это из за Toggle и моих кривых руках.
Как сделать что бы класс .mobile-submenu-active появлялся всегда у элемента на который кликнули, и удалялся у всех остальных?
Вот как делаю.
$(".toper_mobile .menu > li.dropdown > a").on("touchstart click", function (e) {
        e.preventDefault();
        if(!1 === $(this).next().is(":visible")){
         $(this).parent().siblings().find(".dropdown-menu").slideUp(300),
         $(this).parent().siblings().find(".dropdown a").removeClass("mobile-submenu-active")
        }
      $(this).next().slideToggle(300);
      $(this).toggleClass("mobile-submenu-active");
    });


А вот живой пример:
https://codepen.io/Cheizer/pen/LYPGbXZ

Подскажите пожалуйста как правильно написать?
  • Вопрос задан
  • 172 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
Eridani
@Eridani
Мимо проходил
Так я не понял, что вас не устраивало, ибо все работало, но судя по отрывкам "слов", что мне удалось понять, сделал
так
var selector = $(".toper_mobile .menu > li.dropdown > a");  
selector.on("touchstart click", function (e) {
        e.preventDefault();
        if(!1 === $(this).next().is(":visible")){
         $(this).parent().siblings().find(".dropdown-menu").slideUp(300),
         $(selector).removeClass("mobile-submenu-active")
        }
      $(this).next().slideToggle(300);
      $(this).addClass("mobile-submenu-active");
    });
Ответ написан
alams_stoyne
@alams_stoyne
Full Stack Developer - #PHP #CSS #JS #DB
Моё решение было бы таковым:


$(".dropdown > a").on("touchstart click", function (e) {
        e.preventDefault();
        if($(this).hasClass('mobile-submenu-active')){
            $(this).removeClass("mobile-submenu-active"); 
            $(this).next('.dropdown-menu').slideToggle(300);       
        }else{
            $(this).closest('.menu').find(".dropdown-menu").slideUp(300);  
            $(this).closest('.menu').find(".dropdown a").removeClass("mobile-submenu-active");
            $(this).addClass("mobile-submenu-active");  
            $(this).closest('.dropdown').find(".dropdown-menu").slideDown(300);   
        }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$('.toper_mobile .menu > li.dropdown > a').on('touchstart click', function() {
  $('.mobile-submenu-active').removeClass('mobile-submenu-active');
  $(this).addClass('mobile-submenu-active');
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы