Ich mag ein Idiot sein, aber wie hält man mehrere Abschnitte im Akkordeon der jQuery-Benutzeroberfläche offen? Die Demos haben jeweils nur eine geöffnet ... Ich suche ein zusammenklappbares Menüsystem.
Ich mag ein Idiot sein, aber wie hält man mehrere Abschnitte im Akkordeon der jQuery-Benutzeroberfläche offen? Die Demos haben jeweils nur eine geöffnet ... Ich suche ein zusammenklappbares Menüsystem.
Antworten:
Dies wurde ursprünglich in der jQuery-UI-Dokumentation für Akkordeon erläutert :
HINWEIS: Wenn Sie mehrere Abschnitte gleichzeitig öffnen möchten, verwenden Sie kein Akkordeon
Ein Akkordeon erlaubt nicht, dass mehr als ein Inhaltsfenster gleichzeitig geöffnet ist, und dies erfordert viel Aufwand. Wenn Sie nach einem Widget suchen, mit dem mehr als ein Inhaltsfenster geöffnet werden kann, verwenden Sie dieses nicht. Normalerweise kann es stattdessen mit ein paar Zeilen jQuery geschrieben werden, ungefähr so:
jQuery(document).ready(function(){ $('.accordion .head').click(function() { $(this).next().toggle(); return false; }).next().hide(); });
Oder animiert:
jQuery(document).ready(function(){ $('.accordion .head').click(function() { $(this).next().toggle('slow'); return false; }).next().hide(); });
"Ich bin vielleicht ein Idiot" - Sie sind kein Idiot, wenn Sie die Dokumentation nicht lesen, aber wenn Sie Probleme haben, beschleunigt dies normalerweise die Suche nach einer Lösung.
Ziemlich einfach:
<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>
create: function(event) { $(event.target).accordion( "activate", false ); }
, um zusammengebrochen zu beginnen.
create: function(event) { $(event.target).accordion( "activate", false ); }
Sie die Option zu setzen:{active: false}
Hat dies in einem ähnlichen Thread gepostet, dachte aber, dass es auch hier relevant sein könnte.
Dies wird mit einer einzigen Instanz von jQuery-UI Accordion erreicht
Wie andere angemerkt haben, verfügt das Accordion
Widget nicht über eine API-Option, um dies direkt zu tun. Wenn aus irgendeinem Grunde aber Sie müssen das Widget nutzen (zB Sie ein vorhandenes System sind die Aufrechterhaltung) ist es möglich , dies zu erreichen , indem die Verwendung von beforeActivate
Event - Handler - Option zu unterminieren und das Standardverhalten des Widgets zu emulieren.
Beispielsweise:
$('#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
}
});
ui-accordion-header-active
Oder noch einfacher?
<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>
Ich habe ein jQuery-Plugin erstellt, das das gleiche Aussehen wie jQuery UI Accordion hat und alle Registerkarten \ Abschnitte offen halten kann
Sie finden es hier
http://anasnakawa.wordpress.com/2011/01/25/jquery-ui-multi-open-accordion/
funktioniert mit dem gleichen Markup
<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-Code
$(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
});
UPDATE: Das Plugin wurde aktualisiert, um die Standardoption für aktive Registerkarten zu unterstützen
UPDATE: Dieses Plugin ist jetzt veraltet.
Eigentlich suchte ich eine Weile im Internet nach einer Lösung dafür. Und die akzeptierte Antwort gibt die gute Antwort "nach dem Buch". Aber ich wollte das nicht akzeptieren, also suchte ich weiter und fand Folgendes:
http://jsbin.com/eqape/1601/edit - Live-Beispiel
In diesem Beispiel werden die richtigen Stile verwendet und gleichzeitig die angeforderte Funktionalität hinzugefügt. Der Platz zum Schreiben wird hinzugefügt. Fügen Sie bei jedem Header-Klick Ihre eigene Funktionalität hinzu. Ermöglicht auch, dass mehrere Divs zwischen den "h3" liegen.
$("#notaccordion").addClass("ui-accordion ui-accordion-icons ui-widget ui-helper-reset")
.find("h3")
.addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-top ui-corner-bottom")
.hover(function() { $(this).toggleClass("ui-state-hover"); })
.prepend('<span class="ui-icon ui-icon-triangle-1-e"></span>')
.click(function() {
$(this).find("> .ui-icon").toggleClass("ui-icon-triangle-1-e ui-icon-triangle-1-s").end()
.next().toggleClass("ui-accordion-content-active").slideToggle();
return false;
})
.next()
.addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom")
.hide();
HTML Quelltext:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Toggle Panels (not accordion) using ui-accordion styles</title>
<!-- jQuery UI | http://jquery.com/ http://jqueryui.com/ http://jqueryui.com/docs/Theming -->
<style type="text/css">body{font:62.5% Verdana,Arial,sans-serif}</style>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js"></script>
</head>
<body>
<h1>Toggle Panels</h1>
<div id="notaccordion">
<h3><a href="#">Section 1</a></h3>
<div class="content">
Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
</div>
<h3><a href="#">Section 2</a></h3>
<div>
Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet
purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor
velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In
suscipit faucibus urna.
</div>
<h3><a href="#">Section 3</a></h3>
<div class="top">
Top top top top
</div>
<div class="content">
Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.
Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero
ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis
lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui.
<ul>
<li>List item one</li>
<li>List item two</li>
<li>List item three</li>
</ul>
</div>
<div class="bottom">
Bottom bottom bottom bottom
</div>
<h3><a href="#">Section 4</a></h3>
<div>
Cras dictum. Pellentesque habitant morbi tristique senectus et netus
et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in
faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia
mauris vel est.
Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
inceptos himenaeos.
</div>
</div>
</body>
</html>`
Ich habe eine schwierige Lösung gefunden. Rufen wir dieselbe Funktion zweimal auf, jedoch mit unterschiedlicher ID.
JQuery-Code
$(function() {
$( "#accordion1" ).accordion({
collapsible: true, active: false, heightStyle: "content"
});
$( "#accordion2" ).accordion({
collapsible: true, active: false, heightStyle: "content"
});
});
HTML Quelltext
<div id="accordion1">
<h3>Section 1</h3>
<div>Section one Text</div>
</div>
<div id="accordion2">
<h3>Section 2</h3>
<div>Section two Text</div>
</div>
class
wenn Sie einen einzelnen Selektor verwenden, der auf dem von anderen vorgeschlagenen basiert. Dies bedeutet dann, dass Sie sich nicht wiederholen ( DRY )
Erstellen Sie einfach mehrere Akkordeon-Divs, die jeweils ein Ankertag darstellen, wie:
<div>
<div class="accordion">
<a href = "#">First heading</a>
</div>
<div class="accordion">
<a href = "#">First heading</a>
</div>
</div>
Es summiert sich etwas Markup. Aber funktioniert wie ein Profi ...
Einfach: Aktivieren Sie das Akkordeon für eine Klasse und erstellen Sie damit Divs, wie bei mehreren Akkordeoninstanzen.
So was:
JS
$(function() {
$( ".accordion" ).accordion({
collapsible: true,
clearStyle: true,
active: false,
})
});
HTML
<div class="accordion">
<h3>Title</h3>
<p>lorem</p>
</div>
<div class="accordion">
<h3>Title</h3>
<p>lorem</p>
</div>
<div class="accordion">
<h3>Title</h3>
<p>lorem</p>
</div>
Nennen Sie einfach jeden Abschnitt des Akkordeons als sein eigenes Akkordeon. aktiv: n ist 0 für das erste (so wird es angezeigt) und 1, 2, 3, 4 usw. für den Rest. Da es sich bei jedem um ein eigenes Akkordeon handelt, haben alle nur einen Abschnitt, und der Rest wird zum Starten zusammengeklappt.
$('.accordian').each(function(n, el) {
$(el).accordion({
heightStyle: 'content',
collapsible: true,
active: n
});
});
Ohne jQuery-UI-Akkordeon kann man dies einfach tun:
<div class="section">
<div class="section-title">
Section 1
</div>
<div class="section-content">
Section 1 Content: Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
</div>
</div>
<div class="section">
<div class="section-title">
Section 2
</div>
<div class="section-content">
Section 2 Content: Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
</div>
</div>
Und js
$( ".section-title" ).click(function() {
$(this).parent().find( ".section-content" ).slideToggle();
});
öffne jquery-ui - *. js
finden $.widget( "ui.accordion", {
finden _eventHandler: function( event ) {
drinnen
Veränderung
var options = this.options, active = this.active, clicked = $( event.currentTarget ), clickedIsActive = clicked[ 0 ] === active[ 0 ], collapsing = clickedIsActive && options.collapsible, toShow = collapsing ? $() : clicked.next(), toHide = active.next(), eventData = {
oldHeader: active,
oldPanel: toHide,
newHeader: collapsing ? $() : clicked,
newPanel: toShow };
zu
var options = this.options,
clicked = $( event.currentTarget),
clickedIsActive = clicked.next().attr('aria-expanded') == 'true',
collapsing = clickedIsActive && options.collapsible;
if (clickedIsActive == true) {
var toShow = $();
var toHide = clicked.next();
} else {
var toShow = clicked.next();
var toHide = $();
}
eventData = {
oldHeader: $(),
oldPanel: toHide,
newHeader: clicked,
newPanel: toShow
};
Vor active.removeClass( "ui-accordion-header-active ui-state-active" );
hinzufügen if (typeof(active) !== 'undefined') {
und schließen}
genießen
Sie verwenden einfach die Funktion jquery each ().
$(function() {
$( ".selector_class_name" ).each(function(){
$( this ).accordion({
collapsible: true,
active:false,
heightStyle: "content"
});
});
});