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
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?
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'
});
});
$( "#tabs" ).tabs({
activate: function(event, ui) {
//Key => random string
//url => URL you want to set
window.history.pushState({key:'url'},'','url');
}
});
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');
}
});
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;
}
});
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/