2012-01-08 8 views
2

最近Smacking jQueryをJake Rutterが購入しました。これは良い本ですが、私はアコーディオンのコードを少し修正しています。2回目のクリックでjQueryアコーディオンエフェクトを閉じるにはどうすればよいですか?

セクションをクリックすると、意図したとおりに展開されますが、クリックしても(開いたままで)閉じると、即座に再び開くことができます。

2回目にクリックした場合は展開されたセクションを閉じ、クリックした場合は再び開くようにします。これが理にかなってほしい。どんな助けでも大歓迎です。

私が使用した例とコードについては、下記のデモURLをご覧ください。

http://api.jquery.com/slideUp/

は、あなたがそうするたび、あなたは内のすべてのコードを実行しようとしている部分をクリックしてクリック機能にいくつかのif/elseロジックを追加する必要があります:http://demos.d3-creative.com/accordion/accordion-1.html

答えて

0

動作させるには、以下のようなものが必要です。

var $header = $('.accordion-header'),//always cache your selectors 
    $content = $('.accordion-content'); 

$header.click(function() { 

    var $this = $(this), 
     $relatedContent = $this.next(); 

    if($relatedContent.is(':visible')) { // If the tab is already open 

     $relatedContent.slideUp('fast'); 

     $this.find('.icon-active').removeClass('icon-active'); 

     $this.removeClass('header-active'); 

    } else { // if the tab is closed 

     // Close any other opened tabs 
     $content.slideUp('fast'); 
     $header.removeClass('header-active'); 
     $header.find('span').removeClass('icon-active'); 

     // Open related tab 
     $relatedContent.slideDown('fast'); 

     $this.find('span').addClass('icon-active'); 

     $this.addClass('header-active'); 
    } 

}); 

を、あなたはJSの部分でこれを変更する必要がdisplay:none

+0

Thanks Sandeep、しかし私はこのコードを入手できません働く? – StephenMeehan

+0

コンソールで何のエラーが出ているのか、どの部分がうまくいかないのかを教えてください。私のサンプルコードはあなたにアイデアを与えるだけでした。 – Sandeep

+0

私はBenのjsFiddleをチェックした後、文法エラーを修正しました。 – Sandeep

0

は、読み取りを持っています関数。

+0

ウィジェットロジックを邪魔して、この内部状態をどうにかしてしまうことはありませんか? – millimoose

+0

速い返答をいただきありがとうございます、私は本当にこれについていくつかの助けを借りて行うことができます。私はそれが下のリンクのように働くことを望みます。私はリンクの中でコードを編集しようとしましたが、私が望むことをすることができません(それが私が本を買った理由です)。 http://jqueryui.com/demos/accordion/#collapsible – StephenMeehan

+0

あなたのコードをjsfiddleに設定してから、サンプル/回答が既に提供されているはずです。 –

0

#accordion .accordion-contentに追加::コメントを参照してくださいあなたは、ヘッダーをクリックしたときになるように、私は行動を変えた

$('.accordion-header').click(function() { 
    $('.accordion-header').next().slideUp('fast'); // Close all boxes - Hide all contents 
    $('.accordion-header').removeClass('header-active'); // Remove active class from all headers 
    $(this).addClass('header-active'); // Adds active class to currently clicked element 
    $(this).next().slideDown('fast'); // Shows content 

    $('.icon-active:visible').removeClass('icon-active'); 
    $(this).find('span').addClass('icon-active'); 

}); 

最初にすべてのコンテンツボックスを閉じてから、すべてのヘッダーでアクティブなクラスを削除してから、クリックされた要素の直後のボックスをスライドして開き、クラスも変更します。コードはあなたが見ることができるようにコメントされています!

ここExemple:http://jsfiddle.net/snzSy/

また、私はアイコンについては、最後の2行を変更しませんでした!

サイドノート:私たちはどちらも初心者ですので、質問を準備する時間があれば、人々があなたを助けてくれると簡単に言えます。私たちはあなたのコードを直接テストし修正することができるので、JSのフィドルは良いです。

+0

私のためにこれを見てくれてありがとう。私は将来JSフィドルを使用します。私は自分のファイルにコードを落とし、あなたが親切に設定したJSのフィドルページをチェックし、どちらも必要な効果を生み出しませんでしたか?何か不足していますか? – StephenMeehan

+0

ベンに感謝します。私は作業から提供した答えを止めていた文法エラーを修正しました。 – Sandeep

+0

Ben、Sandeepのソリューションがうまくいきました。これを解決するための時間と努力のおかげで、お二人とも大変感謝しています。私は今からJS Fiddleを必ず使用します! :) – StephenMeehan

関連する問題