Jquery ui jquery ui手风琴-多个手风琴展开/折叠所有样式问题

Jquery ui jquery ui手风琴-多个手风琴展开/折叠所有样式问题,jquery-ui,jquery-ui-accordion,Jquery Ui,Jquery Ui Accordion,我正在尝试创建一个手风琴,在这里我可以通过单击来展开/折叠所有部分。我还需要用户能够打开和关闭每次打开0-n个部分的部分。通过stackoverflow和jquery论坛上的一些讨论,我提出了以下解决方案: 我将每个部分都实现为自己的手风琴,其中每个部分都设置为可折叠=真 <html> <head> <title>Accordion Test</title> <script type="text/ja

我正在尝试创建一个手风琴,在这里我可以通过单击来展开/折叠所有部分。我还需要用户能够打开和关闭每次打开0-n个部分的部分。通过stackoverflow和jquery论坛上的一些讨论,我提出了以下解决方案: 我将每个部分都实现为自己的手风琴,其中每个部分都设置为可折叠=真

<html>
    <head>
        <title>Accordion Test</title>

        <script type="text/javascript" src="../scripts/jquery-1.4.2.min.js"></script>
        <script type="text/javascript" src="../scripts/jquery-ui-1.8.4.custom.min.js"></script>

        <link rel="stylesheet" href="../_templates/css/jquery-ui-1.8.6.custom.css"  type="text/css" />
        <link rel="stylesheet" href="../_templates/css/jquery.ui.accordion.css" type="text/css" />
    </head>

<body>
        <a onClick="expandAll()">Expand All</a>
        <br>
        <a onClick="collapseAll()">Collapse All</a>
            <div id="accordion1" class="accord">
            <h5><a href="#">section 1</a></h5>
            <div>
                    section 1 text  
            </div>
            </div>

            <!-- orders section -->
            <div id="accordion2" class="accord">
            <h5><a href="#">section 2</a></h5>
            <div>
                    section 2 text  
            </div>
            </div>

            <!--  section 3 -->
            <div id="accordion3" class="accord">
            <h5><a href="#">section 3</a></h5>
            <div>
                    section 3 text  
            </div>
            </div>

            <!-- section 4 -->
            <div id="accordion4">
            <h5><a href="#">section 4</a></h5>
            <div>
                    section 4 text                  
            </div>
            </div>


</body>
</html>


<script type="text/javascript">

$(function() {
    $('#accordion1').accordion({
        header: 'h5',
        collapsible: true,
        autoHeight: false
    });
});
$(function() {
    $('#accordion2').accordion({
        header: 'h5',
        collapsible: true,
        autoHeight: false,
        active: false
    });
});
$(function() {
    $('#accordion3').accordion({
        header: 'h5',
        collapsible: true,
        autoHeight: false,
        active: false
    });
});
$(function() {
    $('#accordion4').accordion({
        header: 'h5',
        collapsible: true,
        autoHeight: false,
        active: false
    });
});

</script>

<script type="text/javascript">
$(document).ready(function() {

})

function expandAll() {
    alert("calling expandAll");
    $("#accordion1, #accordion2, #accordion3, #accordion4")
        .filter(":not(:has(.ui-state-active))")
        .accordion("activate", 0);
}

function collapseAll() {
    alert("calling collapseAll");
    $("#accordion1, #accordion2, #accordion3, #accordion4")
        .filter(":has(.ui-state-active)")
        .accordion("activate", -1);
}

</script>

手风琴试验
第1节案文
第2节案文
第3节案文
第4节案文
$(函数(){
$('手风琴1')。手风琴({
标题:“h5”,
可折叠的:是的,
自动高度:false
});
});
$(函数(){
$('手风琴2')。手风琴({
标题:“h5”,
可折叠的:是的,
自动高度:false,
活动:错误
});
});
$(函数(){
$('手风琴3')。手风琴({
标题:“h5”,
可折叠的:是的,
自动高度:false,
活动:错误
});
});
$(函数(){
$('手风琴4')。手风琴({
标题:“h5”,
可折叠的:是的,
自动高度:false,
活动:错误
});
});
$(文档).ready(函数(){
})
函数expandAll(){
警报(“呼叫全部”);
$(“手风琴1、手风琴2、手风琴3、手风琴4”)
.filter(“:not(:has(.ui state active))”)
.手风琴(“激活”,0);
}
函数collapseAll(){
警报(“呼叫collapseAll”);
$(“手风琴1、手风琴2、手风琴3、手风琴4”)
.filter(“:具有(.ui状态活动)”)
.手风琴(“激活”、-1);
}
我遇到的问题是,当我单击打开的节的标题时,该节会按预期折叠,但标题仍然具有“ui状态焦点”类,直到我单击页面上的其他位置。因此,我在ui中看到的是,刚刚关闭的部分的标题与悬停效果的背景颜色相同,直到我单击其他位置,它将切换为“默认,未聚焦”颜色

此外,当我使用collapseall链接时,Firefox中的所有链接看起来都很棒。在IE中,最后一节标题具有相同的悬停焦点颜色


有什么建议吗?我是否需要在手风琴关闭时强制它失去焦点?我将如何实现这一点?

在尝试在页面上超越我的jquery ui风格,并尝试破解accordion javascript以删除ui状态焦点类之后,一个简单的解决方案浮出水面

因为我的页面在单击页面上的其他位置时显示了预期的行为,所以我使用blur()来失去焦点

$(document).ready(function() {
    // forces lose focus when accordion section closed. IE and FF.
    $(".ui-accordion-header").click(function(){
          $(this).blur();
        });

})
为了解决IE中的全部折叠问题,我在collapseAll()方法中添加了一行


解决方案,以实现所有开放面板的手风琴。面板是静态的,无法关闭

不要用accordion小部件初始化accordion div

$("#accordion").addClass("ui-accordion ui-widget ui-helper-reset")
  .find('h3')
  .addClass("current ui-accordion-header ui-helper-reset ui-state-active ui-corner-top")
  .prepend('<span class="ui-icon ui-icon-triangle-1-s"/>')
  .next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active");
$(“#accordion”).addClass(“ui accordion ui小部件ui帮助器重置”)
.find('h3')
.addClass(“当前ui手风琴头ui助手重置ui状态活动ui角顶部”)
.prepend(“”)
.next().addClass(“ui手风琴内容ui助手重置ui小部件内容ui角落底部ui手风琴内容活动”);

这是我的答案~希望对你有所帮助

对于多个open,您可以使用现有的jquery UI执行此操作,只需在激活之前添加一个选项:

我的代码如下:

$( "#accordion" ).accordion({
        header: "> div > h3",
        autoHeight: false,
        collapsible: true,
        active: false,
        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('fast'); }  else { currContent.slideDown('fast'); }

            return false; // Cancels the default action
        }
    });
请参阅:

功能崩溃和扩展

function accordion_expand_all()
{
  var sections = $('#accordion').find("h3");
  sections.each(function(index, section){
    if ($(section).hasClass('ui-state-default') && !$(section).hasClass('accordion-header-active')) {
      $(section).click();
    }
  });

}

function accordion_collapse_all()
{
  var sections = $('#accordion').find("h3");
  sections.each(function(index, section){
    if ($(section).hasClass('ui-state-active')) {
      $(section).click();
    }
  });
}

就这样

你可以试试这个小巧、轻量级的插件

它将有几个选项可用,我们可以根据我们的要求修改


URL:

这不是一个手风琴的解决方案。示例中使用了多个手风琴。非常好的解决方案!喜欢!干得好
function accordion_expand_all()
{
  var sections = $('#accordion').find("h3");
  sections.each(function(index, section){
    if ($(section).hasClass('ui-state-default') && !$(section).hasClass('accordion-header-active')) {
      $(section).click();
    }
  });

}

function accordion_collapse_all()
{
  var sections = $('#accordion').find("h3");
  sections.each(function(index, section){
    if ($(section).hasClass('ui-state-active')) {
      $(section).click();
    }
  });
}