Remember which tab was active after refresh

前端 未结 17 1969
眼角桃花
眼角桃花 2020-11-27 04:43

I\'m using jquery tabs on a web page and when the page is refreshed it loses what ever tab I had been on and goes back to the first tab.

Has anyone come across this

相关标签:
17条回答
  • 2020-11-27 05:08

    Here is an alternative way to allow remembering the open tab by the element id (not index). This is useful, if you use this code to synchronize the open tabs on two different pages with similar elements (like show and edit page).

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

    Works with jQuery UI 1.10. Do not forget to include the jquery.cookie plugin!

    <script type="text/javascript" src="/js/jquery.cookie.js"></script>
    
    0 讨论(0)
  • 2020-11-27 05:12

    I assume that you are using jQuery UI tabs ,

    here is an example of using tabs + cookies to save the last clicked tab

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

    demo : open this link http://jqueryui.com/demos/tabs/cookie.html

    the close it and re open it and you will see the same clicked tab

    update: after 3 years of this answer jquery ui has deprecated the cookie option : http://jqueryui.com/upgrade-guide/1.9/#deprecated-cookie-option.

    but you can still append take a look here if this fits your needs or not https://stackoverflow.com/a/14313315/109217

    0 讨论(0)
  • 2020-11-27 05:13

    A simpler alternative I have just implemented:

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

    That will add the hash value to the url so a page refresh will reload that tab, and by using location.replace rather than location.hash, we don't fill the user's history up with unwanted steps back.

    Hope that helps.

    0 讨论(0)
  • 2020-11-27 05:14

    You can try something like this, it's pretty easy to do.

    # 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
    
    0 讨论(0)
  • 2020-11-27 05:15

    Do you think you can add same function on below code.

    $(".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;
    
    });
    
    0 讨论(0)
  • 2020-11-27 05:17

    Like others I was struggling with my ui-tabs cookie history in jQueryUI 1.10. Thanks to Harry's solution and some other online documentation I refer to in the code below I now have a working non-cookie solution! I was able to test in Firefox 18.0.1 and IE 9.0.12. According to my resources, Chrome, Firefox, Safari and IE8 & above support Session Storage.

      $(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 ) 
            }
        }); 
        }); 
    
    0 讨论(0)
提交回复
热议问题