Это моя первая публикация, поэтому, пожалуйста, дайте мне знать, если я не предоставлю достаточно информации.
У меня есть страница, которая содержит несколько аккордеонов.Я хотел использовать несколько аккордеонов, потому что я хотел, чтобы пользователи могли открывать несколько секций одновременно, что не является родным для аккордеона.
Я также хочу, чтобы пользователи могли сортировать эти аккордеоны.То, как в данный момент настроена страница, пользователи могут сортировать аккордеон без проблем.
Когда пользователь переходит к сортировке аккордеонов, у меня есть скрипт, который закроет все существующие аккордеоны, сохранит их идентификаторы в массиве, а затем снова откроет их, когда пользователь завершит сортировку.Эта часть тоже работает нормально.
Проблема возникает, когда вы пытаетесь поместить раздел, который вы сортируете, между двумя ранее открытыми разделами.Похоже, что jQuery не может легко определить, где начинается один раздел, а какой заканчивается, когда они закрыты программно.Обратите внимание, что если они уже были закрыты, это работает, как ожидалось.
Я пробовал несколько подходов к этой проблеме, включая добавление разделительного элемента div между разделами, а также уничтожение аккордеонов и их повторную инициализацию после завершения сортировки, но безрезультатно.
Я подозреваю, что проблема возникает, потому что, когда аккордеон впервые схвачен, секции открыты.Но в этот момент я закрываю все разделы, и хотя раздел закрывается, он вызывает спорадическое перепрыгивание этих разделов, когда вы пытаетесь поместить раздел между двумя.
Я также заметил, что высотасодержание аккордеонных факторов в. В моем примере ниже первый div вызывает проблемы, когда он открыт, и вы пытаетесь отсортировать их, но другие меньше.
Вот код, который у меня есть.JQuery - это базовая библиотека jQuery, и материал, который я написал, для простоты я включил в строку:
<html>
<head>
<link href="/css/flick/jquery-ui.css" media="screen" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/js/jquery-ui.js"></script>
<script type="text/javascript">
$(document).ready(function() {
// Add Accordion stuff
$(".accordion").accordion({
autoHeight: false,
active: false,
collapsible: true
}); // end $(".accordion").accordion
// Add sortables
$('.sortable').sortable({
start: function(e, ui) {
container = $(e.target);
var parent_id = container.parent().parent().attr('id');
expanded_ones = new Array();
var count = 0;
var summary = '';
var child = '';
var active = '';
// now close all other sections
$.each($('#' + parent_id + ' .accordion'), function() {
// get the child element since that has the div id I need
child = $(this).children('div');
// get the active information to see if it is open or closed
active = $(this).accordion('option', 'active');
// check to see if this one is expanded
if(parseInt(active) == active) {
// store this id so we can open it later
expanded_ones[count] = $(child).attr('id');
count++;
// and close the accordion
$(this).accordion({ active: false });
} // end if(parseInt(active) == active)
}); // end $.each($('#' + parent_id + ' .accordion'), function()
}, // end start: function(e, ui)
stop: function(e, ui) {
container = $(e.target);
var parent_elem = '';
// expand the ones that were originally expanded
for(var i = 0; i < expanded_ones.length; i++) {
parent_elem = $('#' + expanded_ones[i]).parent();
$(parent_elem).accordion('option', 'active', 0);
} // end for(var i = 0; i < expanded_ones; i++)
} // end stop: function(e, ui)
}); // end $('.sortable').sortable
}); // end $(document).ready(function() {
</script>
</head>
<body>
<div id="outer">
<div class="box">
<div class="accordion_wrapper sortable" rel="sections">
<div id="accordion_a" class="section_accordion">
<div class="accordion">
<h4>Accordion A</h4>
<div id="accordion_a_content">
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
<p>Stuff</p>
</div>
</div>
</div>
<div id="accordion_b" class="section_accordion">
<div class="accordion">
<h4>Accordion B</h4>
<div id="accordion_b_content">
Stuff
</div>
</div>
</div>
<div id="accordion_c" class="section_accordion">
<div class="accordion">
<h4>Accordion C</h4>
<div id="accordion_c_content">
Stuff
</div>
</div>
</div>
<div id="accordion_d" class="section_accordion">
<div class="accordion">
<h4>Accordion D</h4>
<div id="accordion_d_content">
Stuff
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>