保持多个部分打开的 jQuery UI 手风琴?

IT技术 javascript jquery html jquery-ui
2021-01-30 14:27:00

我可能是个白痴,但是如何让 jQuery UI 的手风琴中的多个部分保持打开状态?演示一次只打开一个...我正在寻找一个可折叠的菜单类型系统。

6个回答

很简单:

<script type="text/javascript">
    (function($) {
        $(function() {
            $("#accordion > div").accordion({ header: "h3", collapsible: true });
        })
    })(jQuery);
</script>

<div id="accordion">
    <div>
        <h3><a href="#">First</a></h3>
        <div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
    </div>
    <div>
        <h3><a href="#">Second</a></h3>
        <div>Phasellus mattis tincidunt nibh.</div>
    </div>
    <div>
        <h3><a href="#">Third</a></h3>
        <div>Nam dui erat, auctor a, dignissim quis.</div>
    </div>
</div>
惊人的。很高兴它对你有用。:) 我喜欢让事情尽可能简单。
2021-03-15 14:27:00
(facepalm) 为每个块单独的手风琴。
2021-03-20 14:27:00
工作得很好。我加 create: function(event) { $(event.target).accordion( "activate", false ); }了开始崩溃。
2021-03-23 14:27:00
在 jquery-ui 1.10 中,要开始折叠,而不是 create: function(event) { $(event.target).accordion( "activate", false ); }设置选项:{active: false}
2021-03-28 14:27:00
这是我用来测试它的jsFiddle jsfiddle.net/txo8rx3q/1我还添加了一些 CSS 来阻止打开的手风琴部分在展开时看起来被选中
2021-04-06 14:27:00

最初AccordionjQuery UI 文档中讨论过

注意:如果您想一次打开多个部分,请不要使用手风琴

手风琴不允许同时打开多个内容面板,这需要付出很多努力。如果您正在寻找允许打开多个内容面板的小部件,请不要使用它。通常它可以用几行 jQuery 来编写,如下所示:

jQuery(document).ready(function(){
  $('.accordion .head').click(function() {
      $(this).next().toggle();
      return false;
  }).next().hide();
});

或动画:

jQuery(document).ready(function(){
  $('.accordion .head').click(function() {
      $(this).next().toggle('slow');
      return false;
  }).next().hide();
});

“我可能是个白痴” - 如果您不阅读文档,您就不是白痴,但如果您遇到问题,通常会加快找到解决方案的速度。

这没有任何意义。如果音乐家的手臂分开很远,手风琴可以打开所有的褶皱,如果乐器的两半放在一起,或者介于两者之间,则所有的褶皱都可以关闭。如果文字有任何意义,那么手风琴软件 UI 控件应该允许打开和关闭面板的任意组合。
2021-03-21 14:27:00
我引用的文字已从文档中删除。我添加了一个指向存档版本的链接。
2021-03-27 14:27:00
此解决方案不执行任何手风琴样式。
2021-03-30 14:27:00
此外,这根本不是问题的解决方案。手风琴文档和选项、事件等列表很差。而不是告诉用户“如果我们没有适合您的选项 - 不要使用它!” 他们应该说“对不起,目前还没有选择,但我们欢迎任何为我们伟大的插件添加功能的贡献者”
2021-04-08 14:27:00
请记住,jQuery UI Accordion 不仅仅是创建实际的手风琴效果。它还为屏幕阅读器添加了许多辅助功能标记。
2021-04-09 14:27:00

将此发布在类似的线程中,但认为它也可能与此处相关。

使用 jQuery-UI Accordion 的单个实例实现这一点

正如其他人所指出的,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; // Cancels the default action
    }
});

看一个jsFiddle 演示

对我来说效果很好,最少的重构:-)
2021-03-16 14:27:00
谢谢!这是最好的解决方案,因为您无需更改所有现有环境。
2021-03-17 14:27:00
我相信活跃class已经改变 ui-accordion-header-active
2021-03-17 14:27:00
如果我们有超过 1 个手风琴,如何处理它,因为当我们只想在 1 个手风琴上实施它时,它会打开所有其他手风琴?谢谢
2021-04-08 14:27:00
它需要 jQuery UI 1.9.0+(Drupal 7 坚持使用 1.8.7)
2021-04-11 14:27:00

或者更简单?

<div class="accordion">
    <h3><a href="#">First</a></h3>
    <div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
</div>    
<div class="accordion">
    <h3><a href="#">Second</a></h3>
    <div>Phasellus mattis tincidunt nibh.</div>
</div>         
<div class="accordion">
    <h3><a href="#">Third</a></h3>
    <div>Nam dui erat, auctor a, dignissim quis.</div>
</div>
<script type="text/javascript">
    $(".accordion").accordion({ collapsible: true, active: false });
</script>
这很好,恕我直言。简单的解决方案,它解决了我在处理大量手风琴项目时遇到的问题。令人惊讶的是,初始化一大组手风琴表现良好。谢谢!
2021-03-17 14:27:00

我已经完成了一个 jQuery 插件,它具有与 jQuery UI Accordion 相同的外观,并且可以保持所有选项卡\部分打开

你可以在这里找到它

http://anasnakawa.wordpress.com/2011/01/25/jquery-ui-multi-open-accordion/

使用相同的标记

<div id="multiOpenAccordion">
        <h3><a href="#">tab 1</a></h3>
        <div>Lorem ipsum dolor sit amet</div>
        <h3><a href="#">tab 2</a></h3>
        <div>Lorem ipsum dolor sit amet</div>
</div>

Javascript代码

$(function(){
        $('#multiOpenAccordion').multiAccordion();
       // you can use a number or an array with active option to specify which tabs to be opened by default:
       $('#multiOpenAccordion').multiAccordion({ active: 1 });
       // OR
       $('#multiOpenAccordion').multiAccordion({ active: [1, 2, 3] });

       $('#multiOpenAccordion').multiAccordion({ active: false }); // no opened tabs
});

更新:插件已更新以支持默认的活动选项卡选项

更新:此插件现已弃用。

伟大的解决方案。
2021-03-26 14:27:00