javascript - jquery UI Accordion 关闭问题

标签 javascript jquery css jquery-ui

为了创建 Accordion ,我使用了 jquery ui Accordion 。

$('#programOutlineBox table tr td').accordion({
        collapsible: true,
        active: false,
        heightStyle: "content",
        autoHeight: false,
    });

下面是全部展开和全部折叠的代码

//expand all

$('#div .ui-accordion-header').removeClass('ui-corner-all').addClass('ui-accordion-header-active ui-state-active ui-corner-top').attr({'aria-selected':'true','tabindex':'0'});

$('#div .ui-accordion-header .ui-icon').removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s');

$('#div .ui-accordion-content').addClass('ui-accordion-content-active').attr({'aria-expanded':'true','aria-hidden':'false'}).slideDown(); 

//collapse all

$('#div .ui-accordion-header').removeClass('ui-accordion-header-active ui-state-active ui-corner-top').addClass('ui-corner-all').attr({'aria-selected':'false','tabindex':'-1'});

$('#div.ui-accordion-header .ui-icon').removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e');

$('#div .ui-accordion-content').removeClass('ui-accordion-content-active').attr({'aria-expanded':'false','aria-hidden':'true'}).slideUp();

但是当我点击全部展开时,问题就来了, Accordion 可以正常打开,但是在一个接一个地关闭单个元素时需要双击它。真的不知道这里出了什么问题吗?

最佳答案

jQueryUI Accordion 小部件不支持一次打开多个 Accordion 。

请参阅此处的文档:http://api.jqueryui.com/accordion/#option-active
您一次可以打开 1 个或 0 个面板。

您的代码正在操纵样式,使所有 Accordion 条目看起来都是可见的,但它没有改变内部 Accordion 状态,因此 jQueryUI 仍然认为所有 Accordion 都已关闭。

当您单击这些“打开” Accordion 项之一时,jQueryUI 会尝试打开该 Accordion (因此看起来什么也没发生),然后当您再次单击它时,它会关闭。

要解决此问题,您的选择是:

  1. 更改为支持多个打开项的不同 Accordion 库(例如,Bootstrap Collapse 支持此 http://getbootstrap.com/javascript/#collapse 还有其他库)

  2. 如果您想要/需要继续使用 jQueryUI,请更改您的页面以使用多个单项 Accordion 。


这是一个使用多个 Accordion 的例子:http://jsfiddle.net/Sly_cardinal/WLsUx/2/

HTML:

<h2>Multiple Accordions</h2>
<div id="accordion2">
    <button type="button" class="expand">Expand All</button>
    <button type="button" class="collapse">Collapse All</button>

    <div class="accordion">
        <h3>Section 1</h3>
        <div>
            <p>Vestibulum a velit eu ante scelerisque vulputate.</p>
        </div>
    </div>

    <div class="accordion">
        <h3>Section 2</h3>
        <div>
            <p>Vivamus non quam. In suscipit faucibus urna. </p>
        </div>
    </div>

    <!-- Add as many accordions as needed here... -->
</div>

JavaScript:

$(function() {
    $(".accordion").accordion({
        // Allows the accordion to be closed - i.e. no item is selected.
        collapsible: true
    });

    $('.expand').click(function(){
        // Trigger each accordion to open it's only element.
        $(".accordion").accordion('option', 'active', 0);
    });

    $('.collapse').click(function(){
        // Close all accordions.
        $(".accordion").accordion('option', 'active', false);
    });
});

如果您需要一次只允许打开一个 Accordion,那么您将需要处理页面上每个 jQueryUI Accordion 之间的行为。

关于javascript - jquery UI Accordion 关闭问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20966031/

相关文章:

javascript - Redux/Thunk 中的递归函数返回 Promise 对象,而不是常规对象

javascript - SP 服务 - 对象不支持此方法

Javascript Canvas的clearRect方法问题

jquery - 在 jquery 中指向元素

jquery - 我如何使用 jquery 检查 ASP.NET TreeView 中的叶节点的开/关

html - 如何在图像上设置div block 'vertical-align:bottom'

CSS 子选择器及其一般渲染速度

javascript - D3 获取变量值

javascript - jQuery 如何使用变量返回鼠标位置

html - 如何停止事件菜单项在选择时拖动整个数组