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

Помните, какая вкладка была активной после обновления

Я использую вкладки jquery на веб-странице, и когда страница обновляется, она теряет вкладку, в которую я был включен, и возвращается к первой вкладке.

Кто-нибудь сталкивался с этой проблемой и знал, как ее решить?

4b9b3361

Ответ 1

Я предполагаю, что вы используете вкладки jQuery UI,

вот пример использования вкладок + куки, чтобы сохранить вкладку с последним кликом

http://jqueryui.com/demos/tabs/#cookie

демо: Откройте эту ссылку http://jqueryui.com/demos/tabs/cookie.html

закройте его и откройте его, и вы увидите та же вкладка с щелчком

обновление: после 3 лет этого ответа jquery ui отказался от опции cookie: http://jqueryui.com/upgrade-guide/1.9/#deprecated-cookie-option.

но вы все еще можете добавить здесь, если это соответствует вашим потребностям или нет fooobar.com/questions/109575/...

Ответ 2

Как и другие, я боролся с моей историей файлов cookie ui-tabs в jQueryUI 1.10. Благодаря решению Harry и некоторой другой онлайн-документации, на которую я ссылаюсь в приведенном ниже коде, у меня теперь есть работающее не-cookie решение! Я смог протестировать в Firefox 18.0.1 и IE 9.0.12. Согласно моим ресурсам, Chrome, Firefox, Safari и IE8 и выше поддерживают хранение сеансов.

  $(function() {
    //  jQueryUI 1.10 and HTML5 ready
    //      http://jqueryui.com/upgrade-guide/1.10/#removed-cookie-option 
    //  Documentation
    //      http://api.jqueryui.com/tabs/#option-active
    //      http://api.jqueryui.com/tabs/#event-activate
    //      http://balaarjunan.wordpress.com/2010/11/10/html5-session-storage-key-things-to-consider/
    //
    //  Define friendly index name
    var index = 'key';
    //  Define friendly data store name
    var dataStore = window.sessionStorage;
    //  Start magic!
    try {
        // getter: Fetch previous value
        var oldIndex = dataStore.getItem(index);
    } catch(e) {
        // getter: Always default to first tab in error state
        var oldIndex = 0;
    }
    $('#tabs').tabs({
        // The zero-based index of the panel that is active (open)
        active : oldIndex,
        // Triggered after a tab has been activated
        activate : function( event, ui ){
            //  Get future value
            var newIndex = ui.newTab.parent().children().index(ui.newTab);
            //  Set future value
            dataStore.setItem( index, newIndex ) 
        }
    }); 
    }); 

Ответ 3

Простая альтернатива, которую я только что реализовал:

$(".tabs").tabs({
    select: function(event, ui) {                   
       window.location.replace(ui.tab.hash);
    },
});

Это добавит хеш-значение в URL-адрес, чтобы обновление страницы перезагрузило эту вкладку, и используя location.replace, а не location.hash, мы не заполняем историю пользователя нежелательными шагами назад.

Надеюсь, что это поможет.

Ответ 4

Теперь, когда cookie ушел в jQuery UI 1.10.0, я смешал подход Gayathiri с новыми параметрами и событиями:

// using cookie plugin from https://github.com/carhartl/jquery-cookie

var tabCookieName = "ui-tabs-1";
$(".tabs").tabs({
    active : ($.cookie(tabCookieName) || 0);
    activate : function( event, ui ) {
        var newIndex = ui.newTab.parent().children().index(ui.newTab);
        // my setup requires the custom path, yours may not
        $.cookie(tabCookieName, newIndex, { path: window.location.pathname });
    }
});

Ответ 5

Короткий, макет-независимый способ сделать это с помощью 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>

Ответ 6

При обновлении веб-страниц они перезагружают свое состояние с сервера, снова запрашивая страницу.

Либо веб-серверу необходимо запомнить состояние и предоставить файл по-другому, чем по умолчанию, либо вы можете использовать файлы cookie или хеш-компонент URL-адреса и некоторый jQuery для хранения состояния, чтения его при загрузке и восстановлении он.

Смотрите плагин jquery.cookie или SWFaddress, узнайте о том, как манипулировать значениями хэша самостоятельно или плагином истории jQuery.

Хэш-метод имеет особую привлекательность, поскольку он реплицирует изменения URL-адреса, поэтому копирование/вставка URL-адреса все еще работает, как и закладки.

Ответ 7

Включите плагин cookie jquery:

<script type="text/javascript" src="/resources/js/jquery.cookies.2.2.0.min.js"></script>

объявить имя файла cookie внутри $.function({.. или document.ready как

var cookieName = "mycookie";

$("#tabs").tabs({
    selected : ($.cookies.get(cookieName) || 0),
    select : function(e, ui) {
        $.cookies.set(cookieName, ui.index);
    }
        });

Ответ 9

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

var tabsid = "#tabs";
var cookieid = "tabs_selected2";

var activetabnr = 0;
if (($.cookie(cookieid)!=null) && ($.cookie(cookieid)!="")) {
   activetabnr = $(tabsid+' a[href="'+$.cookie(cookieid)+'"]').parent().index();
}

$(tabsid).tabs({
   active: $(tabsid).tabs({ active: activetabnr }),
   beforeActivate: function (event, ui) {
        $.cookie(cookieid, "#"+ui.newPanel.attr('id'));
   }
});

Работает с jQuery UI 1.10. Не забудьте включить плагин jquery.cookie!

<script type="text/javascript" src="/js/jquery.cookie.js"></script>

Ответ 10

Вы можете использовать jQuery History plugin, здесь demo (загрузите еще одну ссылку в демо и попробуйте обновить)

Ответ 11

Моя компания блокирует файлы cookie, поэтому я нашел обходное решение. Просто отслеживайте вкладку с помощью скрытого поля и передавайте это значение после завершения запроса. Это не очень хорошо, но он выполняет свою работу.

<% if(request.getAttribute("tab")==null) { %>
    $("#tabs").tabs();
<% } else { %>
    $("#tabs").tabs({selected:<%=request.getAttribute("tab").toString() %>});
<% } %>

На заднем конце я просто установил атрибут

request.setAttribute("tab", f.get("tab").toString());

Надеюсь, что это поможет.

Ответ 12

Как вы думаете, вы можете добавить такую ​​же функцию в код ниже.

$(".menu > li").click(function(e){
    $(".content." + $(".menu > .active").attr("id")).fadeOut("fast", function() {
        $(".content." + e.target.id).fadeIn();
        $(".menu > #" + e.target.id).addClass("active");
    });

    $(".menu > .active").removeClass("active");

    return true;

});

Ответ 13

Вы можете попробовать что-то вроде этого, это довольно легко сделать.

# Set selected_tab to the correct index based on the current url anchor hash
selected_tab = 0
if matches = /#(\w+)/.exec(window.location.hash)
  # find the index of the tab with the given id
  selected_tab = $('#' + matches[1]).index() - 1

# Initialize the tabs and set 'selected' to equal the selected_tab variable we just set
$('.tabable').tabs
  selected: selected_tab,  # this is where the magic happens
  select: (evt, ui) ->
    window.location.hash = ui.panel.id  # set an anchor tag in the url with the tab id

Ответ 14

   $(function () {

        $("#dialog").dialog({
            autoOpen: false,
            show: {
                effect: "blind",
                duration: 1000
            },
            hide: {
                effect: "explode",
                duration: 1000
            }
        });

        //$(function () {
            $("#tabs").tabs({
                    select: function (event, ui) {                       
                    document.location.href = ui.tab.href;                        
                }
            }).show();

        //});

                    $("#MainContent_button1").click(function (event) {                           
                        event .preventDefault();
                         $("#dialog").dialog("open");                           
                    });
    });

Я использовал его в ASP.NET, и он отлично работает для меня. У меня также есть кнопка во второй вкладке, чтобы показать какое-то диалоговое окно, и оно отлично работает.

Пуджа Дхинга

Ответ 15

Я решил эту же проблему с помощью .

Вкладка HTML

 <ul class="tabs clear-fix">
     <li class=""><a href="#tab=java" id="tab1-tab"><i class=" fa fa-search-plus fa-lg" style="font-size:16px; "></i>JAVA</a><span></span></li>
     <li class=""><a href="#tab=js"  id="tab2-tab"><i class=" fa fa-user fa-lg" style="font-size:16px;"></i>JAVA SCRIPT</a><span></span></li>
     <li><a href="#tab=c"  id="tab3-tab"><i class="fa fa-archive fa-lg" style="font-size:16px;"></i>C</a><span></span></li>
     <li><a href="#tab=c2"  id="tab4-tab"><i class=" fa fa-gift fa-lg" style="font-size:16px;"></i>C++</a><span></span></li>
     <li><a href="#tab=jQ"  id="tab5-tab"><i class=" fa fa-heart fa-lg" style="font-size:16px;"></i>jQuery</a><span></span></li>
    </ul>

Javascript

 var selectedTab =  window.location.href.split("#tab=")[1] ;
    var selectedId = $('a[href$=' + selectedTab+']:first').attr('id');

    if (typeof selectedId === "undefined") {
         $('#tab1-tab').trigger("click");
    }
    else{
        $('#'+selectedId).trigger("click");
    }

Для меня это сработало, предложение было оценено.

Ответ 16

Недавно у меня была такая же проблема, и я долго смотрел на документы для JQuery UI Tabs Widget. Я закончил использование событий activate и create для JQuery UI 1.10, а также localStorage для хранения текущей вкладки перед обновлением страницы.

$( ".selector" ).tabs({                                                 
    activate: function( event, ui) {
        //when tab is activated store it index in activeTabIndex
            var activeTabIndex = $('.tabs').tabs('option','active');
        //add activeTabIndex to localStorage and set with key of 'currentTab'  
            localStorage.setItem('currentTab', activeTabIndex); 
                        },
        create: function( event, ui ) {
            $(".tabs").tabs({       
        //when tabs are created on page refresh, the active tab is set to index of 'currentTab' 
        //after getItem from localStorage
        active: localStorage.getItem('currentTab')
    });
    }

});