Активация другого раздела аккордеона jQuery

#jquery #jquery-ui #accordion

#jquery #jquery-пользовательский интерфейс #аккордеон

Вопрос:

Я был бы действительно признателен за любую помощь в решении этой проблемы.

Это значительно упрощенная версия более длинного набора php-кода, но в нем все еще есть проблема, поэтому я исключил остальное как причину.

Аккордеон создается на главной странице. Приведенный ниже HTML-код сгенерирован включенным php-файлом.

Аккордеон работает отлично, единственная проблема заключается в том, что иногда мне захочется загрузить вторую секцию (раздел W) вместо первой (раздел R), как это принято по умолчанию. Я попробовал несколько решений, которые нашел в Интернете, но ни одно из приведенных ниже не работает. Любая помощь была бы высоко оценена.

Код:http://pastebin.com/WQfctKVx

 <script type='text/javascript'>
    $(function() {
        $( "#k_accordion" ).accordion({
            autoHeight: false,
            navigation: true
        });
    });
</script>

<div id="k_accordion">
    <h3 id="sectionR"><a href="#sectionR">Section R</a></h3>
    <div>
        Content for Section R
    </div>

    <h3 id="sectionW"><a href="#sectionW">Section W</a></h3>
    <div>
        Content for Section W
    </div>

    <script language=javascript> $( "#k_accordion" ).accordion( "activate", 2);</script>
    <script language=javascript>// Gives 'is not a function' error:     $("#k_accordion").activate(2); </script>
    <script language=javascript>// $( "#k_accordion" ).accordion( "activate", "sectionW");</script>
    <script language=javascript>// $( "#k_accordion" ).accordion( "activate", "#k_accordion > div:has(#sectionW) > h3"); </script>
    <script language=javascript>// $( "#k_accordion" ).accordion( "activate", $("#h3-sectionW")); </script>
</div>
  

Комментарии:

1. Будет лучше, если вы вставите код непосредственно в свой ответ (с отступом в 4 пробела), чтобы нам было удобнее читать, и ваш вопрос не исчезнет, если это сделает pastebin. Кроме того, мы можем выполнить поиск в SO.

2. О, спасибо, что сделали это. Я вставил его изначально, но отредактировал, потому что он не отображался должным образом. Я посмотрю, как правильно это добавить.

Ответ №1:

active Опция — это то, что вам нужно:

activeType: логическое значение или целое число
По умолчанию: 0

Какая панель открыта в данный момент.

Поддерживается несколько типов:

  • Логическое значение: установка active значения false приведет к свертыванию всех панелей. Для этого требуется, чтобы collapsible option значение было истинным.
  • Целое число: Основанный на нуле индекс панели, которая активна (открыта). Отрицательное значение выбирает панели, идущие в обратном направлении от последней панели.

Если вы хотите, чтобы была открыта вторая панель (например), то установите active: 1 при создании аккордеона:

 $( "#k_accordion" ).accordion({
    autoHeight: false,
    navigation: true,
    active: 1
});
  

Или вы можете использовать option метод для изменения открытой панели после создания аккордеона:

 $('#k_accordion').accordion('option', 'active', 1);
  

Или вы можете использовать activate метод:

 $("#k_accordion").accordion('activate', 1);
  

Просто помните две вещи при использовании active опции или activate метода:

  1. Им нужны индексы панели, а не id атрибуты.
  2. Индексы основаны на нуле (точно так же, как массивы JavaScript), поэтому вторая панель имеет индекс 1, а не 2, который вы пытались использовать.

Комментарии:

1. Большое спасибо за вашу помощь. Добавление ‘active: 1’ к созданию аккордеона сработало. Два других варианта не сработали, и я понятия не имею, почему, но сейчас это работает, так что я очень благодарен, поскольку я застрял на этом в течение нескольких часов.