你怎么能调整一个jQuery UI手风琴的高度?

在我的用户界面,我有一个手风琴设置像这样:

<div id="object_list"> <h3>Section 1</h3> <div>...content...</div> // More sections </div> 

手风琴刚成形时就能正常工作,而且每一部分的内容似乎都能很好地调整。 但是,如果我在.accordion()调用之后(通过ajax)将更多内容添加到手风琴中,则该部分的内部结束溢出。

由于手风琴几乎没有形成内容,所有的内部divs都非常小,因此内容溢出,你可以在里面拿到滚动条的手风琴,几乎没有可视区域。

我试图添加最小高度的样式到object_list div,而内容div无济于事。 将最小高度添加到内部div的工作方式,但它搅乱了手风琴的animation,并将其添加到object_list div没有任何作用。

即使没有足够的内容填充这些部分,我如何才能从内容部分中获得合理的大小?

当您声明手风琴控制div时,可以在div的style标签中join一个高度。 然后,您可以设置fillSpace:true属性来强制手风琴控制无论如何填充该div空间。 这意味着您可以将高度设置为最适合您的页面。 您可以在添加代码时更改div的高度

如果您希望手风琴根据需要dynamic调整其包含的内容,您可以在jQuery UI网站上发布以下技巧。

 //getter var autoHeight = $( ".selector" ).accordion( "option", "autoHeight" ); //setter $( ".selector" ).accordion( "option", "autoHeight", false ); 

这意味着当你select一个文字很多的区域时,手风琴会重新计算它。

autoHeight在1.9中被弃用,在1.10中被删除。

使用:

 $('#id').accordion({heightStyle: 'content'}); 

自动调整你的内部分区。

更新:

我看到这个post还是相当活跃的,所以我决定确保我的回答仍然有效。 看起来这可能不再适用于jQuery UI 1.11 。 它注意到[content]属性已被弃用,并使用[panel]来代替。 现在编写代码片段看起来更像这样:

 $('#id').accordion({heightStyle: 'panel'}); 

我还没有testing过这个,只是发现了,当我有时间testing的时候,会返回并删除这个评论

从文档听起来像你需要设置

 clearStyle: true 

…并且

 autoHeight: false 

我相信,使用clearStyle允许您dynamic地添加内容,而无需使用Accordion。

所以试试这个…

 $( ".selector" ).accordion({ clearStyle: true, autoHeight: false }); 

它看起来像所有的答案现在使用不推荐使用的选项。

使用最新版本的jQuery UI(1.10.x),您应该使用heightStyle: "fill"初始化手风琴heightStyle: "fill"以获得预期的效果。

 $(".selector").accordion({ heightStyle: "fill" }); 

你可以阅读更多在这里的jQuery UI API文档: http : //api.jqueryui.com/accordion/#option-heightStyle

如果页面尺寸dynamic变化,并且需要重新计算手风琴尺寸,则应使用refresh方法刷新手风琴:

 $(".selector").accordion("refresh"); 

这是首选,因为resize方法现在已被弃用。

设置DIV的高度将有所斩获。

 $(document).ready(function() { $("#accordion").show().accordion({ autoHeight: false }); $("#accordion div").css({ 'height': 'auto' }); }); 

在你的jquery-ui.js中search以下部分,并改变heightstyle: "auto"heightstyle: "content"所以更新后的文件将如下所示。

 var accordion = $.widget( "ui.accordion", { version: "1.11.4", options: { active: 0, animate: {}, collapsible: false, event: "click", header: "> li > :first-child,> :not(li):even", heightStyle: "content", icons: { activeHeader: "ui-icon-triangle-1-s", header: "ui-icon-triangle-1-e" }, // callbacks activate: null, beforeActivate: null }, 

只要调用手风琴的.resize()方法,这将重新计算其大小。 http://docs.jquery.com/UI/Accordion#method-resize

我最近设置了一个手风琴,通过ajax检索内容,当一个标签被激活并遇到同样的问题。 我尝试使用这里发布的一些build议,但是直到我将heightStyle设置为content时,才正确地增大了面板的大小。

 $("#myaccordion").accordion({ heightStyle: "content", activate: function(event ui) { //use ajax to retrieve content here. } }); 

我使用jQuery-UI版本1.10.4。

对我来说做下面的准确工作。

 $( "#accordion" ).accordion({ autoHeight: false, 

});