@adrigez

Как убрать класс при нажатии на пустую область?

Здравствуйте все. Есть такой код:

$('.nav-submenu').on('click', function(a) {submenu(this)});
           
           function submenu(a) {
               $this = a;
               $subid = $($this).data("submenu-id");
               $($subid).toggleClass("close");
               return false;
           }

При нажатии на пункт меню с классом "nav-submenu" выполняется функция "submenu", которая берет идентификатор подменю из атрибута "data-submenu-id" и добавляет/убирает к нему класс "close". Все работает хорошо, однако не могу понять как осуществить удаление класса "close" при нажатии на область вне самого подменю. Может, кто-то знает решение?
  • Вопрос задан
  • 3384 просмотра
Пригласить эксперта
Ответы на вопрос 2
@ElianL
javascript-разработчик
Как вариант отлавливать клик на body, и при клике убирать класс. т.е.

$('body').on('click', function(){
  // убираем класс
})


а при клике на самом элементе отменить всплывание событие. то есть событие не дойдет до body

$('.nav-submenu').on('click', function(e){
  e.stopPropagation();
  // остальной код
})


P.S. Ваш кода можно сделать куда приятнее, если заменить
$('.nav-submenu').on('click', function(a) {submenu(this)});

на
$('.nav-submenu').on('click', submenu);
А внутри submenu this и так будет ссылаться на объект, который вы в вашем случае передаете через параметр a
Ответ написан
Shultc
@Shultc
RnD Developer
Отслеживайте потерю фокуса.
Например:
api.jquery.com/focusout
api.jquery.com/blur
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы