Как правильно пишется сворачивание и разворачивание ссылок меню при клике?

Есть меню:
<ul class="category-menu">
                <li>Мужские носки
                  <ul style="display: block;">
                    <li><a href="">Зимние</a></li>
                    <li><a href="">Летние</a></li>
                    <li><a href="">Спортивные носки</a></li>
                    <li><a href="">Тапочки мужские</a></li>
                  </ul>
                </li>
                <li>Мужские носки
                  <ul style="display: block;">
                    <li><a href="">Зимние</a></li>
                    <li><a href="">Летние</a></li>
                    <li><a href="">Спортивные носки</a></li>
                    <li><a href="">Тапочки мужские</a></li>
                  </ul>
                </li>
                <li>Мужские носки
                  <ul style="display: block;">
                    <li><a href="">Зимние</a></li>
                    <li><a href="">Летние</a></li>
                    <li><a href="">Спортивные носки</a></li>
                    <li><a href="">Тапочки мужские</a></li>
                  </ul>
                </li>
                <li>Мужские носки
                  <ul style="display: none;">
                    <li><a href="">Зимние</a></li>
                    <li><a href="">Летние</a></li>
                    <li><a href="">Спортивные носки</a></li>
                    <li><a href="">Тапочки мужские</a></li>
                  </ul>
                </li>
              </ul>

При клике на ссылку первого уровня нужно выводить подменю для этой ссылки, реализовал это так:
var close = true;
      $('.category-menu > li').on('click', function() {
        if (close) {
          $(this).find('ul').show('slow');
          close = false;
        } else if (!close){
          $(this).find('ul').hide('slow');
          close = true;
        }
      });

Но заметил небольшую проблему, если я открыл одну ссылку, и жму на вторую то ничего не происходит, для того чтобы другая ссылка открылась, нужно на нее нажать еще раз. Скорее всего проблема в том, что при клике происходит присваивание close. Может как-то можно решить эту проблему, либо как-то грамотнее написать код?
  • Вопрос задан
  • 328 просмотров
Решения вопроса 3
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Правильно как-то так https://jsfiddle.net/zd41nf9u/
Ответ написан
Комментировать
potapchino
@potapchino
$('.category-menu > li').on('click', function(e) {
  if (e.target === $(this)[0]) {
    $(this).find('ul').toggle();
  }
});
Ответ написан
Комментировать
@Rheinmetall
Могу сморозить глупость
Я в jQ не очень и заметил не в первый раз, что все пишут достаточно громоздкие конструкции для простых задач. Мне интересно зачем? Очевидно что я чего-то не понимаю и это как-то оправдано, но хотелось бы узнать вот чем, например, плохо такое решение
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@GIBRID21
...
$('.category-menu > li').click(function() {
    $('.category-menu > li').removeClass('show');
    $(this).addClass('show');
});
Ответ написан
Ваш ответ на вопрос

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

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