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

Где ошибка в коде jquery?

Есть несколько кнопок и 3 состояния событий для них:
1) клик по текущей кнопке (кнопке добавляется/удаляется класс .open) - открытие/закрытие выпадающего списка;
2) клик по любой следующей кнопке (аналогично .open добавляется/удаляется) - закрытие предыдущего выпадающего списка и открытие текущего выпадающего списка;
3) клик по области вокруг кнопок (класс .open у кнопки удаляется) - закрывается любой открытый выпадающий список.

код
$('.btn-filter').click(function(e) {
		$(".btn-filter").removeClass("open").not($(".btn-filter")).add(this).toggleClass("open");
		if ($(this).next('.open-list').css("display") == "none") {
			$('.open-list').hide('normal');
			$(this).next('.open-list').toggle('normal');
		} else
			$('.open-list').hide('normal');
		
		return false;
	});
	$('.filter-group').click(function() {
		$('.open-list').css('display', 'none');
		$('.btn-filter').removeClass('open');
	});
	
	$(".open-list").on("click", function(e) {
		e.stopPropagation();
	});

второе и третье событие работают отлично, но вот с самим кликом по кнопке и открытием/закрытием списка проблема, список открывается и закрывается при обратном клике, но не меняется состояние кнопки (класс .open не убирается). Что я не верно сделал и как это исправить?
  • Вопрос задан
  • 86 просмотров
Подписаться 1 Оценить 3 комментария
Решения вопроса 1
daager
@daager
Замените
$(".btn-filter").removeClass("open").not($(".btn-filter")).add(this).toggleClass("open");

на
$(".btn-filter").not(this).removeClass("open")
$(this).addClass("open"); //или toggleClass, я не совсем понял, что вы хотите


И меньше используйте длинные монстрообразные конструкции. Как минимум читаемость кода падает, как максимум баги.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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