changement d'emplacement.hachage avec les onglets de l'interface utilisateur jquery
J'ai essayé de trouver un moyen de changer la fenêtre.emplacement.hachez l'onglet actuellement sélectionné dans jQuery UI Tabs .
J'ai essayé:
$("#tabs > ul").tabs();
$("#tabs > ul").bind("tabsshow", function(event, ui) {
window.location.hash = ui.tab;
})
Cela entraîne la modification du hachage en # undefined lorsque l'onglet est modifié.
J'ai aussi essayé:
$("#tabs > ul").tabs({
select: function(event, ui) {
window.location.hash = ui.tab }
});
Mais cela ne semble pas être déclenché du tout.
Toute aide serait appréciée. Grâce.
Edit: il semble qu'une partie de mon problème initial ait quelque chose à voir avec js ailleurs interférer avec cette. La réponse acceptée et l'autre Réponse suggérée légèrement modifiée fonctionnent. Merci à tous.
17 réponses
Dans votre fonction de gestionnaire d'événements ui.tab
est un élément d'ancrage. Vous pouvez récupérer sa valeur de hachage comme ceci:
$("#tabs > ul").tabs();
$("#tabs > ul").bind("tabsshow", function(event, ui) {
window.location.hash = ui.tab.hash;
})
Est-ce que cela fonctionne pour vous?
$('#tabs').tabs({
select: function(event, ui) {
window.location.hash = ui.tab.hash;
}
});
Alors que certaines des solutions ci-dessus fonctionnent, elles font sauter la page dans certains cas, comme la fenêtre.emplacement.L'API de hachage est conçue pour vous amener à une partie spécifique de la page.
Cette solution élégante proposée ici, résout ce problème
$("#tabs").bind("tabsshow", function(event, ui) {
history.pushState(null, null, ui.tab.hash);
});
Cela a fonctionné pour moi, jQuery UI 1.10:
$('#elexumaps_events_tabs').tabs({
activate: function(event, ui) {
window.location.hash=ui.newPanel.selector;
}
});
Voir aussi: http://api.jqueryui.com/tabs/#event-activate
Ma solution simple sans sauter:
$("#tabs").tabs({
activate: function (event, ui) {
var scrollPos = $(window).scrollTop();
window.location.hash = ui.newPanel.selector;
$(window).scrollTop(scrollPos);
}
});
Serait - ce ce que vous allez faire?
$("#tabs > ul").tabs({
select: function(event, ui)
{
window.location = "#" + ui.tab;
}
});
$('#tabs').tabs({
select: function(event, ui){
window.location = ui.tab.href;
}
});
Beaucoup des réponses ci-dessus ne fonctionnent pas avec la version actuelle des onglets de L'interface utilisateur jQuery. Voici ce que j'utilise actuellement:
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);
}
});
Mon chemin pour jQuery UI 1.10.3
$("#tabs").tabs({
beforeActivate: function(event, ui) {
var hash = ui.newTab.children("li a").attr("href");
window.location.hash = hash;
}
});
Cela a fonctionné pour moi en utilisant jquery 1.8
$('#tabs').tabs({
activate: function(event, ui) {
window.location.hash = ui.newPanel.attr('id');
}
});
Après avoir regardé à travers d'autres questions et les documents API jQueryUI, j'ai trouvé que cela a fini par fonctionner pour moi.
$(document).ready(function() {
$("#tabs").tabs({
activate: function( event, ui ) {
location.hash = ui.newTab.children(".ui-tabs-anchor").attr("href").substr(1);
}
});
});
J'utilise un plugin d'onglet que vous pouvez trouver sur github: https://github.com/jquerytools/jquerytools.github.com
, Il semble que l'interface utilisateur.tab lui-même ne renvoie pas une chaîne valide. (au lieu de cela, il renvoie undefined, donc vous diriez qu'il ne retourne rien du tout.)
Essayez de regarder dans la version dev de l'interface utilisateur.jquery.js s'il y a des retours là-bas, peut-être que vous devez appeler un enfant de l'interface utilisateur.onglet ;-)
Ce code fonctionne bien pour moi:
$('#tabs').tabs({
select: function(event, ui) {
window.location = $(ui.tab).attr('href');
}
});
Ce code fonctionne pour moi :
$("#tabs").tabs({
activate: function(event, ui) {
window.location.hash=ui.newPanel.selector;
}
});
Le code suivant est travaillé pour moi..
$("#tabs").tabs({
activate : function(event, ui) {
window.location.hash = ui.newPanel[0].id;
}
});
Ce morceau de code a fonctionné pour moi:
window.location.hash="";