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.

47
demandé sur Josh Lee 2009-02-20 19:35:06

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?

49
répondu Serxipc 2009-02-20 17:16:27
$('#tabs').tabs({
    select: function(event, ui) {
        window.location.hash = ui.tab.hash;
    }
});
25
répondu Herman van der Meulen 2010-10-19 13:46:45

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);
  });
14
répondu n8vision 2012-10-05 17:44:18

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

8
répondu romaninsh 2013-02-28 12:04:49

Ma solution simple sans sauter:

    $("#tabs").tabs({
        activate: function (event, ui) {
            var scrollPos = $(window).scrollTop();
            window.location.hash = ui.newPanel.selector;
            $(window).scrollTop(scrollPos);
        }
    });
6
répondu Arthur 2014-02-17 15:42:03

Serait - ce ce que vous allez faire?

$("#tabs > ul").tabs({ 
   select: function(event, ui) 
   { 
      window.location = "#" + ui.tab;
   }
});
4
répondu hunter 2011-11-02 22:10:14
$('#tabs').tabs({
    select: function(event, ui){
      window.location = ui.tab.href;
    }
});
3
répondu RSK 2012-06-24 20:46:50

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);
    }
});
3
répondu Thomas Higginbotham 2013-06-19 12:35:45

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;
   }
});
3
répondu QuiGonJin2 2013-09-23 11:39:52

Cela a fonctionné pour moi en utilisant jquery 1.8

$('#tabs').tabs({
    activate: function(event, ui) {
       window.location.hash = ui.newPanel.attr('id');
    }
});
1
répondu Andrew 2013-10-31 20:46:10

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);
        }
    });
});
1
répondu Sean 2015-01-12 19:54:57

J'utilise un plugin d'onglet que vous pouvez trouver sur github: https://github.com/jquerytools/jquerytools.github.com

1
répondu FDisk 2015-02-19 20:35:30

, 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 ;-)

0
répondu 2009-05-20 15:07:35

Ce code fonctionne bien pour moi:

$('#tabs').tabs({
    select: function(event, ui) { 
        window.location = $(ui.tab).attr('href');
    }
});
0
répondu pucheta 2014-02-05 12:43:03

Ce code fonctionne pour moi :

$("#tabs").tabs({
    activate: function(event, ui) { 
       window.location.hash=ui.newPanel.selector; 
    }
});
0
répondu Gabriel-Antoine Brouze 2016-03-23 09:35:46

Le code suivant est travaillé pour moi..

$("#tabs").tabs({
   activate : function(event, ui) {
     window.location.hash = ui.newPanel[0].id;
  }
});
0
répondu Sunil S 2017-02-07 04:45:17

Ce morceau de code a fonctionné pour moi:

window.location.hash="";
-1
répondu user1547535 2014-07-11 12:11:24