jQuery UI tabs, update url when clicking on a different tab

前端 未结 8 772
甜味超标
甜味超标 2020-12-09 11:56

I\'m using the tabs of jQuery UI: http://jqueryui.com/demos/tabs/

How to update the current url of the browser when the user click on a different ta

相关标签:
8条回答
  • 2020-12-09 12:18

    I had to use "create" instead of "activate" to get my initial tab to show in the URL:

        $('#tabs').tabs({
            create: function(event, ui) {
                window.location.hash = ui.panel.attr('id');
            }
        });
    

    This solution seems to be working for changing the URL, but when I go back to the URL it doesn't switch tabs for me. Do I have to do something special to make it switch tabs when that URL is hit?

    0 讨论(0)
  • 2020-12-09 12:18

    I used this method within my jQuery responsive tabs to hash the url with the active tab.

    $(function() {
           $('#tabs, #subtabs').responsiveTabs({
                activate: function(event, ui) {
                window.location.hash = $("ul li.r-tabs-state-active a").attr("href");
            },
            startCollapsed: 'accordion'
           });
    });
    
    0 讨论(0)
  • 2020-12-09 12:22
    $( "#tabs" ).tabs({            
            activate: function(event, ui) {
                //Key => random string
                //url => URL you want to set
                window.history.pushState({key:'url'},'','url');
            }
        });
    
    0 讨论(0)
  • 2020-12-09 12:23

    A combination of the other answers here worked for me.

    $( "#tabs" ).tabs({
        create: function(event, ui) {
            window.location.hash = ui.panel.attr('id');
        },
        activate: function(event, ui) {
            window.location.hash = ui.newPanel.attr('id');
        }
    });
    
    0 讨论(0)
  • 2020-12-09 12:27

    This should get what you want (using jQuery UI 1.8, in version 1.9 and later use the activate event, see other answers for code example). I used the sample HTML in jQuery UI demos;

            $( "#tabs" ).tabs({
                select: function(event, ui) {                   
                    window.location.hash = ui.tab.hash;
                }
            });
    
    0 讨论(0)
  • 2020-12-09 12:32

    For jQuery UI 1.10 and later show has been deprecated in favor of activate. Also id is no longer valid jQuery. Use .attr('id') instead. Finally, use on('tabsactivate') instead of bind().

    $(function() {
        $("#tabs").tabs({
            activate: function(event, ui) {
                window.location.hash = ui.newPanel.attr('id');
            }
        });
    });
    

    Post-creation method:

    $("#myTabs").on( "tabsactivate", function(event, ui) {
        window.location.hash = ui.panel.id;
    });
    

    Demo: http://jsfiddle.net/RVHzV/

    Observable result: http://jsfiddle.net/RVHzV/show/light/

    Earlier Version of JQuery

    Add a handler to your tab call to update the location hash with the tab id:

    $("#myTabs").tabs({
       // options ...
       show: function(event, ui) {
            window.location.hash = ui.panel.id;
       }
    });
    

    You can also add this after your UI Tabs are created:

    $("#myTabs").bind( "tabsshow", function(event, ui) {
            window.location.hash = ui.panel.id;
    });
    

    Code demo: http://jsfiddle.net/jtbowden/ZsUBz/1/

    Observable result: http://fiddle.jshell.net/jtbowden/ZsUBz/1/show/light/

    0 讨论(0)
提交回复
热议问题