私はjQueryアコーディオンの代替案を作成しました。これは、複数のオープンセクションのサポートを提供していなかったためです(なぜ彼らがそのサポートを含まないことを選択したのか、その歴史は何ですか?)。StackOverflowとGoogleで調査を行い、他にどのようなオプションが考えられるかを確認しました。複数の要素でその場で使用できるものが必要でした。
いくつかの解決策を見て実験した後、最終的に、私は自分のバージョンを作成しました(http://forum.jquery.com/topic/accordion-multiple-sections-open-at-onceからのKevinの解決策に基づいていますが、かなり変更)。
jsFiddleはここで見つけることができます:http://jsfiddle.net/3jacu/1/
インラインコード:
$(document).ready(function(){
$.fn.togglepanels = function(){
return this.each(function(){
h4handler = $(this).find("h4");
$(h4handler).prepend('<div class="accordionarrow">▼</div>');
$(h4handler).click(function() {
$(h4handler).toggle(
function() {
barclicked = $(this);
$(barclicked).find(".accordionarrow").html('►');
$(barclicked).next().slideUp('slow');
window.console && console.log('Closed.');
return false;
},
function() {
barclicked = $(this);
$(barclicked).find(".accordionarrow").html('▼');
$(barclicked).next().slideDown('slow');
window.console && console.log('Open.');
return false;
}
);
});
});
};
$("#grouplist").togglepanels(); }
奇妙なことに、右側のアコーディオン矢印は、ローカルコピーでは機能しているのに、jsFiddleに貼り付けると機能しなくなりました。
いずれにせよ、問題はトグルが期待どおりに機能していないことです。トグルが機能すると、重複したトグルイベントが発生し、その結果、セクションが閉じて開き、最終的に閉じて、その時点から開きません(開いてから閉じます)。それが機能することを前提としています!最初は応答しないので動作しません。どこかに論理エラーがあると思います。
私がコードで書いた/見たものから、指定されたハンドルで対応するタグ(この場合はh4)を検索し、ハンドルを変数にポップします。次に、アコーディオン矢印クラス(右にフロート)を適用しながら、h4タグに矢印を追加します。次に、クリックイベントを追加します。これにより、h4がクリックされると、2つの関数が切り替わります(jQueryのトグル関数を使用)。
ここでの問題は、jQueryのトグル関数が2つの関数を切り替えるために正常に機能すると誤って想定している可能性があることであり、独自のトグルコードを実装する必要があると思われます。私が間違っているなら私を訂正してください!
できるだけ効率的になるようにコードを書こうとしているので、それについてのフィードバックもいただければ幸いです。
お手数ですが、よろしくお願いいたします。