Вот моя проблема.
Я создал прекрасно работающий аккордеон, используя jQuery Tools. С ним очень легко работать.
Клиент возвращается и говорит, что теперь аккордеоны должны быть разборными, чего не было в оригинальной спецификации. К сожалению, JQuery Tools не имеет встроенной функциональности, поэтому я работаю над своим собственным кодом.
Я подошел близко, но ничего не работает на 100%. Я создал JSFiddle моего кода здесь: http://jsfiddle.net/4ubZs/15/
Код свёртывания работает нормально.
// Code to collapse accordions
$("#accordion > h2").click(function(){
if (this.className == "current") {
$(this).removeClass("current");
$(this).next("div").slideToggle("slow");
} else {
Проблема заключается в открытии. Я попытался открыть 2 разных решения. Первый блок кода пытается использовать API инструментов. Он не будет повторно открывать недавно закрытую вкладку, но будет работать, если я заменю «current_tab» на фактический номер индекса в вызове .click (), но не если я попытаюсь получить индекс программно.
var api = $("#accordion").data("tabs");
var current_tab = api.getIndex(this);
api.click(current_tab);
Второй блок пытается обойти API-инструменты jQuery и работает, однако при открытии я получаю двойную анимацию, которая, как я предполагаю, противоречит функциональности инструментов jQuery.
$(this).parent().children("h2").removeClass("current");
$(this).parent().children("div").slideUp("slow");
$(this).toggleClass("current");
$(this).next("div").slideToggle("slow");
Если кто-то может указать, что я делаю неправильно, это будет ОГРОМНАЯ помощь.
Спасибо!
Edit:
Думая об этом больше, первый блок «вновь открыть» код не работает имеет смысл. Поскольку я просто удаляю классы из открытого аккордеона, я на самом деле не говорю jQuery Tools, что он закрыт. Поэтому, когда я нажимаю на него, чтобы открыть его, насколько известно jQuery Tools, этот аккордеон уже открыт и не нуждается в открытии снова. Я думаю, мне нужно найти способ сообщить jQuery Tools, что аккордеон закрыт и этот код будет работать.