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
daager
@daager
Замените
$(".btn-filter").removeClass("open").not($(".btn-filter")).add(this).toggleClass("open");

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


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

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

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