Saya mungkin idiot, tetapi bagaimana Anda menjaga banyak bagian di akordeon jQuery UI terbuka? Semua demo hanya dibuka satu pada satu waktu ... Saya mencari sistem jenis menu yang dapat diciutkan.
Saya mungkin idiot, tetapi bagaimana Anda menjaga banyak bagian di akordeon jQuery UI terbuka? Semua demo hanya dibuka satu pada satu waktu ... Saya mencari sistem jenis menu yang dapat diciutkan.
Jawaban:
Ini awalnya dibahas dalam dokumentasi jQuery UI untuk Accordion :
CATATAN: Jika Anda ingin beberapa bagian terbuka sekaligus, jangan gunakan akordeon
Akordeon tidak mengizinkan lebih dari satu panel konten terbuka pada saat yang sama, dan perlu banyak upaya untuk melakukannya. Jika Anda mencari widget yang memungkinkan lebih dari satu panel konten terbuka, jangan gunakan ini. Biasanya dapat ditulis dengan beberapa baris jQuery, seperti ini:
jQuery(document).ready(function(){ $('.accordion .head').click(function() { $(this).next().toggle(); return false; }).next().hide(); });
Atau animasi:
jQuery(document).ready(function(){ $('.accordion .head').click(function() { $(this).next().toggle('slow'); return false; }).next().hide(); });
"Saya mungkin idiot" - Anda bukan idiot jika Anda tidak membaca dokumentasinya, tetapi jika Anda mengalami masalah, biasanya mempercepat menemukan solusi.
Cukup mudah:
<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 ); }
untuk mulai runtuh.
create: function(event) { $(event.target).accordion( "activate", false ); }
Anda mengatur opsi:{active: false}
Memposting ini di utas yang serupa, tetapi menurut Anda mungkin relevan di sini juga.
Mencapai ini dengan satu instance jQuery-UI Accordion
Seperti yang dicatat orang lain, Accordion
widget tidak memiliki opsi API untuk melakukan ini secara langsung. Namun, jika karena alasan tertentu Anda harus menggunakan widget (misalnya Anda mempertahankan sistem yang ada), hal ini dapat dilakukan dengan menggunakan opsi beforeActivate
event handler untuk menumbangkan dan meniru perilaku default widget.
Sebagai contoh:
$('#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
Atau bahkan lebih sederhana?
<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>
Saya telah melakukan plugin jQuery yang memiliki tampilan yang sama dengan jQuery UI Accordion dan dapat membuat semua tab \ bagian terbuka
Anda dapat menemukannya di sini
http://anasnakawa.wordpress.com/2011/01/25/jquery-ui-multi-open-accordion/
bekerja dengan markup yang sama
<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>
Kode 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
});
UPDATE: plugin telah diperbarui untuk mendukung opsi tab aktif default
PEMBARUAN: Plugin ini sekarang tidak digunakan lagi.
Sebenarnya sedang mencari solusi di internet untuk ini untuk sementara waktu. Dan jawaban yang diterima memberikan jawaban "menurut buku" yang baik. Tetapi saya tidak mau menerimanya jadi saya terus mencari dan menemukan ini:
http://jsbin.com/eqape/1601/edit - Contoh Langsung
Contoh ini menarik gaya yang tepat dan menambahkan fungsionalitas yang diminta pada saat yang sama, lengkap dengan ruang untuk menulis menambahkan fungsionalitas Anda sendiri pada setiap klik tajuk. Juga memungkinkan beberapa div berada di antara "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();
Kode 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>`
Saya menemukan solusi yang rumit. Mari kita panggil fungsi yang sama dua kali tetapi dengan id berbeda.
Kode JQuery
$(function() {
$( "#accordion1" ).accordion({
collapsible: true, active: false, heightStyle: "content"
});
$( "#accordion2" ).accordion({
collapsible: true, active: false, heightStyle: "content"
});
});
Kode 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
seperti yang disarankan oleh orang lain, ini berarti Anda tidak mengulangi diri Anda sendiri ( KERING )
Sederhana, buat beberapa div akordian yang masing-masing mewakili satu tag jangkar seperti:
<div>
<div class="accordion">
<a href = "#">First heading</a>
</div>
<div class="accordion">
<a href = "#">First heading</a>
</div>
</div>
Itu menambahkan beberapa markup. Tetapi bekerja seperti ...
Sederhana: aktifkan akordeon ke kelas, lalu buat div dengan ini, seperti contoh kelipatan akordeon.
Seperti ini:
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>
Panggil saja setiap bagian akordeon sebagai akordeonnya sendiri. active: n akan menjadi 0 untuk yang pertama (sehingga akan ditampilkan) dan 1, 2, 3, 4, dll untuk sisanya. Karena masing-masing adalah akordeonnya sendiri, semuanya hanya akan memiliki 1 bagian, dan sisanya akan diciutkan untuk memulai.
$('.accordian').each(function(n, el) {
$(el).accordion({
heightStyle: 'content',
collapsible: true,
active: n
});
});
Tanpa akordeon jQuery-UI, seseorang cukup melakukan ini:
<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>
Dan js
$( ".section-title" ).click(function() {
$(this).parent().find( ".section-content" ).slideToggle();
});
buka jquery-ui - *. js
Temukan $.widget( "ui.accordion", {
Temukan _eventHandler: function( event ) {
di dalam
perubahan
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 };
untuk
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
};
sebelum active.removeClass( "ui-accordion-header-active ui-state-active" );
Menambahkan if (typeof(active) !== 'undefined') {
dan tutup}
Nikmati
Anda cukup menggunakan fungsi jquery each ();
$(function() {
$( ".selector_class_name" ).each(function(){
$( this ).accordion({
collapsible: true,
active:false,
heightStyle: "content"
});
});
});