2010-07-20 2 views
1

Первый вопрос, когда-либо заданный в stackoverflow. Таким образом, проблема заключается в: Два аккордеона декларации о document.ready (JQuery 1.4.2 и JQuery UI 1.8.2):jQuery вложенная проблема аккордеона

 $(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

ответ

3

К сожалению, это ошибка в JQuery UI, in the accordion code:

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);     
    }); 
});​ 

You can try it out here

+0

Большое спасибо, на этот вопрос ответили. – user397169

+0

@msqsf - Добро пожаловать :) Обязательно принимайте ответы на этот и будущие вопросы, это помогает следующему парню, который приходит с поиском той же проблемы. Я вхожу в этот отчет об ошибке, так как это допустимая ошибка, я обновлю это, как только у меня появится ссылка. –

+0

Просто FYI для всех, кто сталкивается с этим сейчас, эта ошибка исправлена. – jon3laze