Вы можете сократить свой код до следующего:
$(".fade").click(function() {
$(this).next().slideToggle("slow");
});
Это связывает обработчик событий click
со всеми элементами с классом .fade
вместо индивидуальной привязки id
, как вы это делаете в настоящее время. Использование slideToggle
касается того, является ли элемент уже видимым или нет для вас, поэтому вам не нужно беспокоиться о его сохранении в переменной.
Проблема с вашей попыткой - переменная hidden
, которую вы используете для этого. При развертывании одного элемента hidden
устанавливается на false
. Когда вы затем нажимаете на другое, hidden
имеет значение false, поэтому часть slideUp
выполняется, а hidden
устанавливается на true
, поэтому при повторном нажатии запускается правильная ветвь (else
).
Вот обновленная рабочая скрипка .