Подтвердить что ты не робот

Jquery ui tabs больше не поддерживает cookie? что теперь?

Извиняюсь за то, что это открытый вопрос, но я в недоумении.

Начиная с версии 1.9 пользовательского интерфейса jquery, они обесценились с помощью параметра cookie, чтобы сохранить активное состояние вкладок на нескольких страницах. http://jqueryui.com/upgrade-guide/1.9/#deprecated-cookie-option

Я еще не видел ЛЮБОЙ другой документации о том, как это сделать сейчас! Так что я остаюсь царапать голову.

Мое лучшее предположение - использовать какой-то event для создания файла cookie, а затем загрузить файл cookie? Или есть какой-то другой способ сохранить активное состояние вкладок на нескольких страницах и по предпочтениям пользователя?

4b9b3361

Ответ 1

Если бы тот же самый вопрос укусил меня сегодня. Вот что работает:

  • Использовать плагин jquery.cookie(https://github.com/carhartl/jquery-cookie) (Этот шаг не требуется, но это облегчает работу с кукисами)
  • Используйте следующий фрагмент кода:

    $( ".selector" ).tabs({
        active   : $.cookie('activetab'),
        activate : function( event, ui ){
            $.cookie( 'activetab', ui.newTab.index(),{
                expires : 10
            });
        }
    });
    

Это устанавливает куки файл под названием "activetab", срок действия которого истекает через 10 дней (см. jquery.cookie documentation для получения дополнительных опций), чтобы запомнить выбранную вкладку в данный момент, когда любая вкладка щелчок. Этот файл cookie считывается во время инициализации, чтобы отобразить последнюю сохраненную вкладку. При первом посещении страницы вкладки будут свернуты.

Ответ 2

Короткий, макет-независимый способ сделать это с помощью localStorage:

$("#tabs").tabs({
  active: localStorage.getItem("currentIdx"),
  activate: function(event, ui) {
      localStorage.setItem("currentIdx", $(this).tabs('option', 'active'));
  }
});

Макет-специфический способ сделать это с использованием пользовательских атрибутов данных (возможно, полезно, если значения атрибута должны были каким-то образом использоваться в другом месте вашего script).

jQuery UI:

$("#tabs").tabs({
    active: localStorage.getItem("currentTabIndex"),
    activate: function(event, ui) {
        localStorage.setItem("currentTabIndex", ui.newPanel[0].dataset["tabIndex"]);
    }
});

Пример компоновки HTML:

<div id="tabs">
    <div id="tabs-1" data-tab-index="0">
       tab 1 stuff...
    </div>
    <div id="tabs-2" data-tab-index="1">
       tab 2 stuff...
    </div>    
    <div id="tabs-3" data-tab-index="2">
       tab 3 stuff...
    </div>
</div>

Ответ 3

Использование функции localStorage HTML5 дает решение проблемы, и теперь рекомендуемый способ сделать это. Файлы cookie вызывают добавление дополнительных данных для каждого веб-запроса и ответа.

Вы обнаружите, что localStorage поддерживается браузерами как архаичный, как IE8, и если вы действительно хотите поддерживать IE6 и IE7, это прокладка для этого.

HTML

<div class="mytab" id="mytab_1">
 <ul>....</ul>
 <div id="xx1">...</div>
 ...
</div>

JS

currTabIndex=sessionStorage['mytab_1'];

И вызов tabfuntion

$('.mytab').tabs({
 active:currTabIndex,
 load:function(event,ui){
  sessionStorage[''+this.id]=(ui.panel.index()-1);
 }
});

Надеюсь, что это будет полезно.

Ответ 4

event tabsactivate, а затем сохранить в sessionStorage или localStorage.

$(function() {
    var selectedTabId = sessionStorage.getItem("selectedTab");
    selectedTabId = selectedTabId === null ? 0 : selectedTabId; //your default being 0
    $("#tabs").tabs({
        active: selectedTabId,
        activate : function( event, ui ) {
            selectedTabId = $("#tabs").tabs("option", "active");
            sessionStorage.setItem("selectedTab", selectedTabId);
        }
    });
});

Ответ 5

Просто:

activate: function(event, ui) {        
    localStorage.setItem("accIndex", $(this).tabs("option", "active"))
},
active: parseInt(localStorage.getItem("accIndex"))

Ответ 6

Вы можете установить активную вкладку, используя активную опцию, например

$( ".selector" ).tabs({ active: 1 });

Существует множество способов передать значения на веб-страницу, отличную от файлов cookie. Например, вы можете использовать параметры запроса и скрытые поля. Затем вы создадите onload script, который будет читать любой пример, используя пример загрузки jQuery. $(function() {}).

Чтобы прочитать строки запроса, просмотрите эту страницу, которая дает вам метод

строка запроса чтения Jquery

function getParameterByName( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}

и прочитать скрытое поле.

$( ".selector" ).tabs({ active: $('#my-hidden-fiel').val() });

Я согласен с решением jquery ui удалить эту функцию, поскольку файлы cookie действительно должны использоваться только для сохранения сессий по моему мнению, а не для создания полей или вкладок, например.