JQuery проблема вложенного аккордеона - PullRequest
1 голос
/ 20 июля 2010

Первый вопрос, когда-либо задаваемый в stackoverflow.Итак, проблема в следующем: два объявления аккордеона в document.ready (jquery 1.4.2 и jquery ui 1.8.2):

       $(document).ready(function () {
        $("#accordion").accordion({
            header: 'h3'
        });

        $("#accordion2").accordion({ 
            header: 'h4' 
        });

        $(function () {
            $(".get-index").click(function () {
                var activecontent = $("#accordion").accordion("option", "active");
                alert(activecontent);                   
            });
        });
    });

HTML:

<div id="accordion">
    <h3><a href="#">Section 1</a></h3>
    <div>
        Content Section 1: Parent
        <div id="accordion2">
            <h4><a href="#">SubSection 1</a></h4>
            <div>content section 1: child</div>
            <h4><a href="#">SubSection 2</a></h4>
            <div>content section 2: child</div>
            <h4><a href="#">SubSection 3</a></h4>
            <div>content section 3: child</div>
            <h4><a href="#">SubSection 4</a></h4>
            <div>content section 4: child</div>
        </div>
    </div>
    <h3><a href="#">Section 2</a></h3>
    <div>
        Content Section 2: Parent
    </div>
    <h3><a href="#">Section 3</a></h3>
    <div>
        Content Section 3: Parent
    </div>
    <h3><a href="#">Section 4</a></h3>
    <div>
        Content Section 4: Parent

        <button type="button" class="get-index ui-button ui-button-text-only ui-widget ui-state-default ui-corner-all">
            <span class="ui-button-text">index</span>
        </button>

    </div>
</div> 

И наконец: что не така почему "activecontent" это 7?Я знаю, что есть 4 родительские панели + 4 дочерние панели и начиная с 0, это 7. Но я пытаюсь получить индекс последней родительской панели, и он должен быть 3.

Любая помощь высоко ценится.

Отправленный код: http://jsbin.com/eqewe

1 Ответ

3 голосов
/ 20 июля 2010

К сожалению, это ошибка в jQuery UI, в коде аккордеона :

o.active = o.collapsible && clickedIsActive ? false 
  : $('.ui-accordion-header', this.element).index(clicked);

Он находит любой $('.ui-accordion-header'), а не только указанный вами селектор заголовка и не только непосредственные дочерние элементы. Я исправлю это как ошибку с парнями из jQuery UI, свойство .active действительно должно быть установлено по-другому . Я ввел ошибку с командой jQuery UI для этого здесь: http://dev.jqueryui.com/ticket/5841


Вы можете обойти это сейчас, найдя элемент самостоятельно с помощью .index(), например:

$(function () {
  $(".get-index").click(function () {
    var a= $("#accordion").children('.ui-state-active').index('#accordion > h3');
    alert(a);                   
  });
});​

Вы можете попробовать это здесь

...