21

一度に複数のパネルを展開できるアコーディオンを作成しようとしています。jQuery UI API で見つけようとしましたが、まだ適切な方法が見つかりません。

jQuery UI アコーディオンを使用してこれを行う方法があれば教えてください。

4

3 に答える 3

50

他の人が指摘したように、Accordionウィジェットにはこれを直接行うための API オプションがありません。ただし、ウィジェットを使用する必要beforeActivateがある場合は、イベント ハンドラー オプションを使用して、ウィジェットのデフォルトの動作を覆してエミュレートすることで、これを実現できます。

例えば:

$('#accordion').accordion({
    collapsible:true,

    beforeActivate: function(event, ui) {
         // The accordion believes a panel is being opened
        if (ui.newHeader[0]) {
            var currHeader  = ui.newHeader;
            var currContent = currHeader.next('.ui-accordion-content');
         // The accordion believes a panel is being closed
        } else {
            var currHeader  = ui.oldHeader;
            var currContent = currHeader.next('.ui-accordion-content');
        }
         // Since we've changed the default behavior, this detects the actual status
        var isPanelSelected = currHeader.attr('aria-selected') == 'true';

         // Toggle the panel's header
        currHeader.toggleClass('ui-corner-all',isPanelSelected).toggleClass('accordion-header-active ui-state-active ui-corner-top',!isPanelSelected).attr('aria-selected',((!isPanelSelected).toString()));

        // Toggle the panel's icon
        currHeader.children('.ui-icon').toggleClass('ui-icon-triangle-1-e',isPanelSelected).toggleClass('ui-icon-triangle-1-s',!isPanelSelected);

         // Toggle the panel's content
        currContent.toggleClass('accordion-content-active',!isPanelSelected)    
        if (isPanelSelected) { currContent.slideUp(); }  else { currContent.slideDown(); }

        return false; // Cancel the default action
    }
});

jsFiddleのデモを見る

于 2013-03-29T14:02:20.483 に答える
8

積み重ねられた複数のアコーディオンを作成でき、各アコーディオンには 1 つのパネルしかありません。このようにして、パネルを個別に切り替えることができます。

于 2014-05-21T08:39:07.877 に答える
6

アコーディオンは、定義上、特定の方法で切り替える拡張要素のセットです。あなたはそれを望んでいません。拡張要素のセットが必要なだけです。jQuery でそれを構築するのは非常に簡単です。多くの場合、これ以上は必要ありません:

$('.my-heading-class').on('click', function() {
   $(this).next('.my-content-class').slideToggle();
});

<div class="my-heading-class">My Heading</div>
<div class="my-content-class">My Content</div>
于 2013-03-29T12:54:26.717 に答える