2009-09-13 3 views
3

У меня есть аккордеон JQuery, который отлично работает. Разделы расширяются/сворачиваются при нажатии на соответствующие заголовки. Но я хочу добавить функциональность, чтобы при нажатии кнопки «Далее» открывается следующий раздел и нажатие кнопки «Предыдущая» возвращает меня к предыдущему разделу.JQuery аккордеон, следующий и предыдущий мастер, как получить предыдущие и следующие разделы?

Это было сделано на этой странице http://jquery.bassistance.de/accordion/demo/?p=1.1.2 (последний пример), но не уверен, как мне реализовать то же самое в моем случае.

Любые предложения, пожалуйста.

Благодаря

UPDATE: Как получить предыдущий или следующий раздел аккордеона?

<script type="text/javascript"> 
$("#accordion").accordion({ 
    header: "h3.header" 
    , autoHeight: false 
    , collapsible: true 
    }); 
</script> 

<div id="accordion"> 
<h3 class="header">Section 1</h3> 
<div> content 1 .. content 1 .. content 1 .. content 1 .. 
    <input class="next" type="button" value="next"/> 
</div> 
<h3 class="header">Section 2</h3> 
<div> content 2 .. content 2 .. content 2 .. content 2 .. 
    <input class="previous" type="button" value="previous"/> 
    <input class="next" type="button" value="next"/> 
</div> 
<h3 class="header">Section 3</h3> 
<div> content 3 .. content 3 .. content 3 .. content 3 .. 
    <input class="previous" type="button" value="previous"/> 
</div> 
</div> 
+0

Можете ли вы пометить один из ответов, как принято, или никто из них не работал на вас? – Mateng

+0

@Mateng - Я использовал JQueryUI Accordion вместо кода в вопросе, так как ни один из ответов не помог мне тогда. – TigerTiger

+1

jQueriUI Accordion является преемником плагина аккордеона jQuery. С jQueryUI решение @johnjelineks работает отлично. BTW: Вы можете ответить на свой вопрос, а затем пометить его как правильно. – Mateng

ответ

5

Я был в состоянии заставить его работать. Дайте этому выстрел, он работает с JQuery 1.6 и JQuery UI 1.8:

HTML:

<div id="checkout"> 
    <h2><a href="#">Section 1</a></h2> 
    <div> 
     <form action="#"> 
      <h3>Content</h3> 
      <input type="submit" class="next" value="Continue" /> 
     </form> 
    </div> 
    <h2><a href="#">Section 2</a></h2> 
    <div> 
     <form action="#"> 
      <h3>Content</h3> 
      <input type="submit" class="prev" value="Back" /> 
     </form> 
    </div> 
</div> 

JQuery:

<script type="text/javascript"> 
    $(document).ready(function() { 
     // create new accordion 
     var checkout = $('#checkout').accordion({ event: false }); 

     // assign accordion navigation events to button clicks 
     $('form', checkout).each(function (index) { 
      $(this) 
      .children(':submit') 
      .filter('.next, .prev') 
      .click(function() { 
       checkout.accordion('option', 'active', index + ($(this).is('.next') ? 1 : -1)); 
       return false; 
      }); 
     }); 
    }); 
</script> 
+0

Очень хорошо, это работает. Я использовал его в более длинной форме - поэтому я оставил теги формы вокруг кнопок ввода и заменил '' ('form', checkout) 'part на' $ ('div', checkout) '. (В HTML не разрешены вложенные формы). – Mateng

0

Вы пытались сделать так, как в примере?

var wizard = $("#accordion").accordion({ 
    header: 'h3.header', 
    event: false 
}); 

$("h3.header", wizard).each(function(index) { 
    $(this) 
    .next() 
    .children(":button") 
    .filter(".next, .previous") 
    .click(function() { 
     wizard.changeAccordion("activate", index + ($(this).is(".next") ? 1 : -1)) 
    }); 
}); 
+1

Я пробовал, но он дал ошибку для функции changeAccordion (не найден).«Этот плагин теперь является частью пользовательского интерфейса jQuery, и эта автономная версия больше не будет обновляться. Страница останется в качестве ссылки». Так что я использую JQuery UI, а не файлы из этого плагина. – TigerTiger

0

Я искал решение той же проблемы и придумать с этим (я работаю с JQuery 1.4.2 и JQuery UI 1.8.1):

<div id="wizard"> 
    <h3><a href="#step1">Step 1/3</a></h3> 
    <div id="step1"> 
     <button type="button">Next &raquo;</button> 
    </div> 
    <h3><a href="#step2">Step 2/3</a></h3> 
    <div id="step2"> 
     <button type="button">Next &raquo;</button> 
    </div> 
    <h3><a href="#step3">Step 3/3</a></h3> 
    <div id="step3"> 
     <button type="submit">Finish</button> 
    </div> 
</div> 

И это сценарий:

<script type="text/javascript"> 
    $(function() { 

     $('#wizard').accordion(); 

     $('#wizard :button').each(function (index, elm) { 
      $(elm).click(function() { 
       $('#wizard').accordion('activate', index + 1); 
      }); 
     }); 

    }); 
</script> 
0

попробовать это:

var wizard = $("#register_form").accordion({ 
    header: '.title', 
    event: 'none', 
    collapsible: false 
}); 
$(':button.previous').click(function() { wizard.accordion("activate", 0); }); 
$(':button.next').click(function() { wizard.accordion("activate", 1); }); 

Где :button - это предыдущие и следующие кнопки, а wizard - ваш аккордеон jQuery. Оставьте все остальные коды. Посмотрите, работает ли это. Пожалуйста, оставьте отзыв, спасибо.

+0

Он работает, но он только переключает между первой и второй панелью. – Mateng

2

У меня была аналогичная проблема, и используется:

<button onclick="$('#accordion').accordion('activate', 0);">Prev</button> 
<button onclick="$('#accordion').accordion('activate', 2);">Next</button> 

на каждом аккордеона панели. Это находится на второй панели и возвращает вас к первому (индекс 0) или вперед к третьему (индекс 2).

4

Добавьте это к файлам JQuery. Он добавляет функцию $ («# accordion»). Accordion («next») и параметр «loopOnNext» (по умолчанию false), чтобы заставить его вернуться в верхнее окно, когда оно находится в конце.

$.extend($.ui.accordion.prototype, { 
    next: function(){ 
     var index = this.option('active') || 0, 
      next = index + 1, 
     nodes = $(this.element).children('h3').length; 
     if(next >= nodes && this.option('loopOnNext') === true) { 
      next = 0; 
     } 

     return this.activate(next); 
    } 
});