1

В настоящее время у меня есть аккордеон jquery, который делает именно то, что я хочу, за исключением одной вещи. Когда я нажимаю ссылку на панели аккордеона, чтобы перейти на другую страницу, я бы хотел, чтобы аккордеон оставался открытым в одном и том же месте (если возможно), когда я нажимаю кнопку «Назад». Кнопка «Назад» - это изображение, которое я создал, а не кнопку «Назад» браузера.JQuery - Помните открытое состояние аккордеона

Это мой JQuery скрипт:

<script> 
$(function() { 
    $(".jquery-ui-accordion").accordion({ 
     autoHeight: false, 
     collapsible: true, 
     heightStyle: "content", 
     active: false, 
     animate: 300 // collapse will take 300ms 
    }); 
    $('.jquery-ui-accordion h3').bind('click',function(){ 
     var self = this; 
     setTimeout(function() { 
      theOffset = $(self).offset(); 
      $('body,html').animate({ scrollTop: theOffset.top - 100 }); 
     }, 310); // ensure the collapse animation is done 
    }); 
}); 
</script> 

Это то, что в моем заголовке:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js"></script> 

Он открывает и прокручивает очень хорошо, и если есть длинный кусок текста в другой панели аккордеона , панель, на которую была нажата кнопка, перейдет в режим просмотра экрана.

Я не хочу изменять то, что он делает в настоящее время, я просто хочу иметь возможность добавить состояние запоминания, когда я нажимаю на изображение кнопки «Назад».

Я читал около jquery куки, но честно даже не знал, с чего начать, чтобы включить его.

Любая помощь была бы принята с благодарностью!

+0

Если вам не нужна поддержка IE7, используйте localStorage – filur

+0

Извините, что общее число noob, не знаю, что такое localStorage или как использовать – jojovee

ответ

-1

Вы можете создать флаг и установить его как true при щелчке аккордеона.

При нажатии кнопки «Назад» проверьте, установлен ли флаг как истинный или ложный. Если он установлен как true, просто активируйте действие click для этого селектора.

$('.jquery-ui-accordion h3').trigger('click') 
+0

Нет, что не работает, и, кроме того, я не хочу забирать часть привязки как это то, что делает мой аккордеон прыгать в верхнюю часть экрана. Честно говоря, я даже не знаю, поставил ли я его в нужное место. – jojovee

1

Вы можете использовать localStorage, как показано ниже:

$(document).ready(function() { 
     var selectedIndex = localStorage.getItem("selected"), 
      // If a valid item exits in localStorage use it, else use the default 
      active = (selectedIndex >= 0) ? parseInt(selectedIndex) : false; 
     console.log(active); 
     $(".jquery-ui-accordion").accordion({ 
      active: active, 
      autoHeight: false, 
      collapsible: true, 
      heightStyle: "content", 
      animate: 300, // collapse will take 300ms, 
      activate: function (event, ui) { 
       if (ui.newHeader.length) // item opened 
        var index = $('.jquery-ui-accordion h3').index(ui.newHeader); 
       if (index > -1) // has a valid index 
        localStorage.setItem("selected", index); 


      } 
     }); 

     $('.jquery-ui-accordion h3').bind('click', function() { 
      var self = this; 
      setTimeout(function() { 
       theOffset = $(self).offset(); 
       $('body,html').animate({ 
        scrollTop: theOffset.top - 100 
       }); 
      }, 310); // ensure the collapse animation is done 
     }); 
    }); 

Не забудьте check whether localStorage is supported or not прежде чем использовать его, хотя. Вы отказываетесь от файлов cookie, делающих то же самое.

+0

Я скопировал ваш скрипт выше, и это не сработало. Это фактически дефолт всех моих аккордеонных панелей в открытом состоянии, а затем, когда я щелкнул ссылку на другую страницу и по возвращении щелкнул моей спиной, она не вернула меня туда, где я был в данный момент. Я хочу, чтобы поведение имитировало то, что делает jquery.cookie.js, но я не мог заставить эту функцию прокрутки работать, поэтому отбросил ее. Тем не менее, вы очень цените свою помощь. – jojovee

+0

Я тестировал выше локально, и он отлично работал для меня. Как вы * «дефолтировали все аккордеонные панели в открытом состоянии» * ..? Можете ли вы создать онлайн-демо с тем, что вы до сих пор ...? Вы не должны исключать такую ​​информацию из вопроса. Если вы придумали другое описание, которое эффективно означает, что вы потратили время на всех тех, кто пытался ответить, что очень разочаровывает. И что делает 'jquery.cookie.js' do ..? Продвигаясь вперед, пожалуйста, подтвердите, что прочитал вопрос и убедитесь, что все было записано в описании перед публикацией. –

+0

Я не по умолчанию аккордеоны в открытое состояние, ваш сценарий выше сделал это. Извините, если я не объясню правильно, но я попробую еще раз. В настоящее время это то, что делает мой аккордеон: 1. Нажмите на ссылку в главном меню, перейдите на страницу с аккордеоном. 2. Нажмите на панель в аккордеоне, аккордеон откроется и отобразит меню со ссылками на другие страницы. 3. Нажмите на одну ссылку на панели аккордеона, перейдите на другую страницу.4 Нажмите на стрелку назад, чтобы вернуться на панель аккордеона, теперь все меню аккордеона закрыты. – jojovee

Смежные вопросы