使用jQuery UI选项卡更改location.hash
我一直在试图find一种方法来将window.location.hash更改为Jquery UI选项卡中当前选定的选项卡 。
我试过了:
$("#tabs > ul").tabs(); $("#tabs > ul").bind("tabsshow", function(event, ui) { window.location.hash = ui.tab; })
这会导致在标签更改时将散列更改为#undefined。
我也试过:
$("#tabs > ul").tabs({ select: function(event, ui) { window.location.hash = ui.tab } });
但这似乎并没有被触发。
任何帮助,将不胜感激。 谢谢。
编辑:它看起来像我最初的问题的一部分,与其他干扰这个问题的js有关。 接受的答案和其他build议的答案略有修改做的工作。 谢谢大家。
在你的事件处理函数中, ui.tab
是一个锚元素。 你可以像这样获取它的哈希值:
$("#tabs > ul").tabs(); $("#tabs > ul").bind("tabsshow", function(event, ui) { window.location.hash = ui.tab.hash; })
这对你有用吗?
$('#tabs').tabs({ select: function(event, ui) { window.location.hash = ui.tab.hash; } });
虽然上面的一些解决scheme可以工作,但是在某些情况下,它们会导致页面跳转,因为window.location.hash API旨在将您引导到页面的特定部分。
这里提出的这个整洁的解决scheme解决了这个问题
$("#tabs").bind("tabsshow", function(event, ui) { history.pushState(null, null, ui.tab.hash); });
这对我来说,jQuery UI 1.10:
$('#elexumaps_events_tabs').tabs({ activate: function(event, ui) { window.location.hash=ui.newPanel.selector; } });
另见: http : //api.jqueryui.com/tabs/#event-activate
我简单的解决scheme没有跳跃
$("#tabs").tabs({ activate: function (event, ui) { var scrollPos = $(window).scrollTop(); window.location.hash = ui.newPanel.selector; $(window).scrollTop(scrollPos); } });
这是你要去的吗?
$("#tabs > ul").tabs({ select: function(event, ui) { window.location = "#" + ui.tab; } });
$('#tabs').tabs({ select: function(event, ui){ window.location = ui.tab.href; } });
上面的许多答案不适用于当前版本的jQuery UI选项卡。 这是我目前使用的:
var tabsUi = $('#tabs'); tabsUi.tabs(); // Add hash to URL when tabs are clicked tabsUi.find('> ul a').click(function() { history.pushState(null, null, $(this).attr('href')); }); // Switch to correct tab when URL changes (back/forward browser buttons) $(window).bind('hashchange', function() { if (location.hash !== '') { var tabNum = $('a[href=' + location.hash + ']').parent().index(); tabsUi.tabs('option', 'active', tabNum); } else { tabsUi.tabs('option', 'active', 0); } });
我的方式为jQuery UI 1.10.3
$("#tabs").tabs({ beforeActivate: function(event, ui) { var hash = ui.newTab.children("li a").attr("href"); window.location.hash = hash; } });
这对我使用Jquery 1.8工作
$('#tabs').tabs({ activate: function(event, ui) { window.location.hash = ui.newPanel.attr('id'); } });
看过其他一些问题和jQueryUI API文档后,我发现这最终为我工作。
$(document).ready(function() { $("#tabs").tabs({ activate: function( event, ui ) { location.hash = ui.newTab.children(".ui-tabs-anchor").attr("href").substr(1); } }); });
我正在使用一个标签插件,你可以在github上find它: https : //github.com/jquerytools/jquerytools.github.com
看起来像ui.tab本身不返回一个有效的string。 (而不是返回undefined,所以你会说它根本不会返回任何东西。)
尝试在ui.jquery.js的dev版本中查看是否有任何返回,也许你必须调用ui.tab的子项;-)
这段代码适合我:
$('#tabs').tabs({ select: function(event, ui) { window.location = $(ui.tab).attr('href'); } });
这段代码适用于我:
$("#tabs").tabs({ activate: function(event, ui) { window.location.hash=ui.newPanel.selector; } });
以下代码适用于我..
$("#tabs").tabs({ activate : function(event, ui) { window.location.hash = ui.newPanel[0].id; } });
这段代码适合我:
window.location.hash="";