我可能是个白痴,但是如何让 jQuery UI 的手风琴中的多个部分保持打开状态?演示一次只打开一个...我正在寻找一个可折叠的菜单类型系统。
保持多个部分打开的 jQuery UI 手风琴?
IT技术
javascript
jquery
html
jquery-ui
2021-01-30 14:27:00
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>
这最初在Accordion的jQuery 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(); });
“我可能是个白痴” - 如果您不阅读文档,您就不是白痴,但如果您遇到问题,通常会加快找到解决方案的速度。
将此发布在类似的线程中,但认为它也可能与此处相关。
使用 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 演示
或者更简单?
<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>
我已经完成了一个 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
});
更新:插件已更新以支持默认的活动选项卡选项
更新:此插件现已弃用。
其它你可能感兴趣的问题