2014-09-04 47 views
0

創建簡單的手風琴,它工作正常。如何保持一個按鈕打開總是

發現的問題是:如果我打開一個手風琴選項卡,如果我點擊它,那麼它不應該關閉。 如果我打開另一個手風琴,那麼手風琴應該關閉,只有當我再次點擊它時才能打開新的手風琴。

這是我試過的。 在我的實施中,手風琴標籤可以在同一次點擊打開和關閉。

的Jquery:

$('.info').find('.accordion-toggle').click(function() { 
     //Expand or collapse this panel 
    $(this).toggleClass("open").next().slideToggle('fast'); 
     //Hide the other panels 
    $(".accordion-toggle").not($(this)).removeClass("open"); 
    $(".accordion-content").not($(this).next()).slideUp('fast'); 
}); 

Demo Link

回答

2

你可以把一個條件檢查,如果點擊手風琴使用下面的代碼有class="open" -

if($(this).attr('class').indexOf('open')==-1) 
    $(this).toggleClass("open").next().slideToggle('fast'); 

Demo

編輯 - 由阿明的建議,我們可以使用的jQuery提供.hasClass方法如下面

if(!$(this).hasClass('open')) 
    $(this).toggleClass("open").next().slideToggle('fast'); 

Demo with hasClass

+0

OP希望其他人只在第一次關閉默認設置後纔打開第二次點擊。 – 2014-09-04 07:33:05

+0

您也可以使用'if($(this).hasClass('open'))' – 2014-09-04 07:34:35

+0

「只有再次點擊它才能打開新開的手風琴。這句話是有點混淆.. OP請澄清 – 2014-09-04 07:36:00

1

你也可以試試這個小提琴。 我剛剛給slideDown調用添加了回調函數。

$('.info').find('.accordion-toggle').click(function() { 
//Expand or collapse this panel 

$(this).addClass("open").next().slideDown('fast',function(){ 
$(".accordion-toggle").not($(this)).removeClass("open"); 

$(".accordion-content").not($(this)).slideUp('fast'); 
}); 
//Hide the other panels 

}); 

http://jsfiddle.net/etfs1L43/9/

1

我改寫了你的JS - 因爲我明白你的要求,要不僅擴大了點擊的內容,如果沒有內容顯示當前... http://jsfiddle.net/etfs1L43/12/

$(".accordion-toggle").on("click", function() { 
    if (!$(this).hasClass("open")) { 
     $(".open").next().slideUp('slow'); 
     if (!$(".accordion-toggle").hasClass("open")) { 
      $(this).addClass("open").next().slideDown('slow'); 
     } else { 
      $(".open").removeClass("open"); 
     } 
    } 
}); 
相關問題