2013-10-28 4 views
0

У меня есть простой аккордеон, который позволяет всем рухнуть. Таким образом, щелчок на активной панели сворачивает его. У меня есть before и after псевдоклассы, назначенные для стрелок, но я не могу понять, как удалить активный класс из активной метки при нажатии на нее, чтобы свернуть ее. Активный класс будет удален, если вы нажмете на другой ярлык, но не нажимаете на активную метку, чтобы свернуть его.jQuery accordion: удалять активный класс при нажатии активной метки

Адрес fiddle.

А вот сценарий:

$(".accordion > dt").click(function(){ 
    $('.active').removeClass('active'); 

    $(this).addClass('active'); 
    if(false == $(this).next().is(':visible')) { 
     $('.accordion > dd').slideUp(600); 
    } 
    $(this).next().slideToggle(600); 
}); 

Я пробовал несколько различных конфигураций (например, обращающего if(false) заявление и удаление active класса), но все, что я попытался было выстрел в темно. Любая помощь оценивается.

ответ

2

попробовать

$(".accordion > dt").click(function(){ 
    $('.active').removeClass('active'); 

    if(false == $(this).next().is(':visible')) { 
     $(this).addClass('active'); 
     $('.accordion > dd').slideUp(600); 
    } 
    $(this).next().slideToggle(600); 
}); 
+0

Пригвожден. Спасибо! Я могу принять ваш ответ через шесть минут. :) –

+0

Это было очень простое решение. Geez. Еще раз спасибо. –

1

использованием toggleClass() и siblings()

попробовать этот

$(".accordion > dt").click(function(){ 
    //$('.active').removeClass('active'); 
     $(this).toggleClass('active').siblings('dt').removeClass(); 

      if(false == $(this).next().is(':visible')) { 
    $('.accordion > dd').slideUp(600); 
      } 
     $(this).next().slideToggle(600); 
}); 
+0

Спасибо, Bipen. Это работает, хотя Ганеш уже ответил. Но я тоже узнал об этом. Очень признателен! –

+0

приветствуется .... рад, что это помогло .. приветствия !! – bipen

1

Это потому, что ваш активный класс добавляется в dt элемент каждый раз, когда вы нажимаете. Вы добавляете только активный класс, если нет активных классов, что означает, что ни один из элементов dd не отображается. Так что вам нужно изменить, чтобы

$(".accordion > dt").click(function(){ 
    $('.active').removeClass('active'); 
    if(false == $(this).next().is(':visible')) { 
     $('.accordion > dd').slideUp(600); 
     $(this).addClass('active'); 
    } 
    $(this).next().slideToggle(600); 
}); 

Проверьте Updated Demo Fiddle.

+0

Спасибо, Kishor. Да, Ганеш D победил вас с этим ответом примерно на пять минут, чтобы зеленая стрела шла к нему, но спасибо за это. Сейчас так очевидно, что вы, ребята, указали на это. Очень признателен. –

Смежные вопросы