Я могу быть идиотом, но как сохранить открытыми несколько разделов в аккордеоне jQuery UI? Все демонстрации имеют только одну открытую за раз ... Я ищу свертываемую систему типов меню.
javascript
jquery
html
jquery-ui
Уокер
источник
источник
Ответы:
Это был первоначально обсуждался в документации JQuery UI для аккордеона :
«Я могу быть идиотом» - вы не идиот, если не читаете документацию, но если у вас возникают проблемы, это обычно ускоряет поиск решения.
источник
Довольно просто:
<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 ); }
для начала развалился.create: function(event) { $(event.target).accordion( "activate", false ); }
вы устанавливали опцию:{active: false}
Разместил это в аналогичной ветке, но подумал, что это может быть актуально и здесь.
Достижение этого с помощью одного экземпляра 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
источник
ui-accordion-header-active
Или еще проще?
<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 });
ОБНОВЛЕНИЕ: плагин обновлен для поддержки опции активных вкладок по умолчанию
ОБНОВЛЕНИЕ: этот плагин устарел.
источник
На самом деле какое-то время искал в Интернете решение этой проблемы. И принятый ответ дает хороший ответ «по книге». Но я не хотел этого принимать, поэтому продолжил поиск и нашел следующее:
http://jsbin.com/eqape/1601/edit - Живой пример
В этом примере используются правильные стили и одновременно добавляются требуемые функциональные возможности, а также остается место для записи и добавления собственных функций при каждом щелчке заголовка. Также позволяет размещать несколько div между "h3".
$("#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 код:
<!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>`
источник
Я нашел хитрое решение. Давайте вызовем одну и ту же функцию дважды, но с другим идентификатором.
Код JQuery
$(function() { $( "#accordion1" ).accordion({ collapsible: true, active: false, heightStyle: "content" }); $( "#accordion2" ).accordion({ collapsible: true, active: false, heightStyle: "content" }); });
HTML код
<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
Просто создайте несколько аккордеанских div, каждый из которых представляет один тег привязки, например:
<div> <div class="accordion"> <a href = "#">First heading</a> </div> <div class="accordion"> <a href = "#">First heading</a> </div> </div>
Это добавляет некоторую разметку. Но работает как профи ...
источник
Просто: активируйте аккордеон в классе, а затем создайте с ним div, как несколько экземпляров аккордеона.
Как это:
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>
https://jsfiddle.net/sparhawk_odin/pm91whz3/
источник
Просто назовите каждую секцию аккордеона отдельным аккордеоном. active: n будет 0 для первого (поэтому он будет отображаться) и 1, 2, 3, 4 и т. д. для остальных. Поскольку каждый - это отдельный аккордеон, у всех будет только 1 секция, а остальные будут свернуты для начала.
$('.accordian').each(function(n, el) { $(el).accordion({ heightStyle: 'content', collapsible: true, active: n }); });
источник
Еще проще: пометить его в атрибуте class каждого тега li и иметь jquery для перебора каждого li для инициализации аккордеона.
источник
Без аккордеона jQuery-UI можно просто сделать это:
<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>
И js
$( ".section-title" ).click(function() { $(this).parent().find( ".section-content" ).slideToggle(); });
https://jsfiddle.net/gayan_dasanayake/6ogxL7nm/
источник
открыть jquery-ui - *. js
найти
$.widget( "ui.accordion", {
найти
_eventHandler: function( event ) {
внутриизменение
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 };
к
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 };
перед
active.removeClass( "ui-accordion-header-active ui-state-active" );
добавить
if (typeof(active) !== 'undefined') {
и закрыть}
наслаждаться
источник
Вы просто используете функцию jquery each ();
$(function() { $( ".selector_class_name" ).each(function(){ $( this ).accordion({ collapsible: true, active:false, heightStyle: "content" }); }); });
источник