我正在使用jQuery UI的标签:http://jqueryui.com/demos/tabs/
当用户通过向其添加锚链接点击其他标签时,如何更新浏览器的当前网址: ex:url.html#tab-4 并同时推送浏览器的当前历史记录。
谢谢!
答案 0 :(得分:33)
对于 jQuery UI 1.10 以及之后的show
,我们已弃用activate
。此外id
不再是有效的jQuery。请改用.attr('id')
。最后,使用on('tabsactivate')
代替bind()
。
$(function() {
$("#tabs").tabs({
activate: function(event, ui) {
window.location.hash = ui.newPanel.attr('id');
}
});
});
创作后方法:
$("#myTabs").on( "tabsactivate", function(event, ui) {
window.location.hash = ui.panel.id;
});
可观察的结果:http://jsfiddle.net/RVHzV/show/light/
早期版本的JQuery
在制表符调用中添加处理程序,以使用制表符ID更新位置哈希:
$("#myTabs").tabs({
// options ...
show: function(event, ui) {
window.location.hash = ui.panel.id;
}
});
您也可以在创建UI标签后添加:
$("#myTabs").bind( "tabsshow", function(event, ui) {
window.location.hash = ui.panel.id;
});
代码演示:http://jsfiddle.net/jtbowden/ZsUBz/1/
可观察的结果:http://fiddle.jshell.net/jtbowden/ZsUBz/1/show/light/
答案 1 :(得分:11)
这应该得到你想要的(使用jQuery UI 1.8,在版本1.9及更高版本中使用activate event,请参阅代码示例的其他答案)。我在jQuery UI演示中使用了示例HTML;
$( "#tabs" ).tabs({
select: function(event, ui) {
window.location.hash = ui.tab.hash;
}
});
答案 2 :(得分:3)
首先,我们需要更新选项卡更改的哈希值(这是最新的jQueryUI):
$('#tabs').tabs({
beforeActivate: function (event, ui) {
window.location.hash = ui.newPanel.selector;
}
});
然后我们需要更新哈希更改的活动选项卡(即启用浏览器历史记录,后退/前进按钮和用户手动键入哈希):
$(window).on('hashchange', function () {
if (!location.hash) {
$('#tabs').tabs('option', 'active', 0);
return;
}
$('#tabs > ul > li > a').each(function (index, a) {
if ($(a).attr('href') == location.hash) {
$('#tabs').tabs('option', 'active', index);
}
});
});
答案 3 :(得分:2)
$( "#tabs" ).tabs({
activate: function(event, ui) {
//Key => random string
//url => URL you want to set
window.history.pushState({key:'url'},'','url');
}
});
答案 4 :(得分:1)
我必须使用“创建”代替“激活”才能让我的初始标签显示在网址中:
$('#tabs').tabs({
create: function(event, ui) {
window.location.hash = ui.panel.attr('id');
}
});
此解决方案似乎适用于更改URL,但当我返回到URL时,它不会为我切换标签。当该网址被点击时,我是否必须做一些特别的事情才能让它切换标签?
答案 5 :(得分:0)
以Jeff B&#39的工作为基础......这适用于jQuery 1.11.1。
$("#tabs").tabs(); //initialize tabs
$(function() {
$("#tabs").tabs({
activate: function(event, ui) {
var scrollTop = $(window).scrollTop(); // save current scroll position
window.location.hash = ui.newPanel.attr('id'); // add hash to url
$(window).scrollTop(scrollTop); // keep scroll at current position
}
});
});
答案 6 :(得分:0)
这里的其他答案的组合对我有用。
$( "#tabs" ).tabs({
create: function(event, ui) {
window.location.hash = ui.panel.attr('id');
},
activate: function(event, ui) {
window.location.hash = ui.newPanel.attr('id');
}
});
答案 7 :(得分:0)
我在jQuery响应选项卡中使用此方法来使用活动选项卡对网址进行哈希处理。
$(function() {
$('#tabs, #subtabs').responsiveTabs({
activate: function(event, ui) {
window.location.hash = $("ul li.r-tabs-state-active a").attr("href");
},
startCollapsed: 'accordion'
});
});