J'utilise Twitter Bootstrap et ses "onglets".
J'ai le code suivant:
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#add">add</a></li>
<li><a data-toggle="tab" href="#edit" >edit</a></li>
<li><a data-toggle="tab" href="#delete" >delete</a></li>
</ul>
Les onglets fonctionnent correctement, mais dans l'URL n'est pas ajouté les #add, #edit, #delete.
Lorsque je supprime data-toggle
l'URL change, mais les onglets ne fonctionnent pas.
Des solutions pour cela?
jquery
twitter-bootstrap
Ivanka Todorova
la source
la source
Réponses:
Essayez ce code. Il ajoute l'onglet href à l'url + ouvre l'onglet en fonction du hachage lors du chargement de la page:
la source
&&
signifieAND
que si la gauche de cela équivaut à vrai (hash
n'est pas 0, nul ou vide) et la droite équivaut à vrai, alors faites quelque chose, mais la ligne se termine par un;
donc il n'y a rien à faire avant;
et peu importe si un tab est affiché ou non et peu importe ce qui.tab('show')
revient, il essaiera toujours. Lors de l'évaluation de la logique de cette manière, si la première partie de l'équation (avant&&
) est fausse, il n'est pas nécessaire de continuer l'évaluation, donc l'onglet ne sera pas affiché. Vous pouvez obtenir le même effet comme ceci:if(hash){ $('ul.nav a[href="' + hash + '"]').tab('show'); }
a && b;
signifie essayera
et seulement si c'est vrai, essayezb
. Les chaînes sont vraies si elles ne sont pas vides.Trois composants sont nécessaires pour une solution complète:
Je ne pense pas que les commentaires ici, ni la réponse acceptée, traitent tous ces scénarios.
Comme il y a un peu d'implication, je pense que c'est plus intéressant en tant que petit plugin jQuery: https://github.com/aidanlister/jquery-stickytabs
Vous pouvez appeler le plugin comme ceci:
J'ai fait un article de blog pour cela, http://aidanlister.com/2014/03/persisting-the-tab-state-in-bootstrap/
la source
L'utilisation
data-toggle="tab"
demande au plugin de gérer les onglets, qui en le faisant appellepreventDefault
l'événement ( code sur github ).Vous pouvez utiliser votre propre activation d'onglet et laisser l'événement passer:
Et vous devez supprimer l'attribut
data-toggle="tab"
Consultez la doc si vous avez des doutes.
la source
Comme vos éléments d'ancrage modifient déjà le hachage de l'url, écouter l' événement onhashchange est une autre bonne option. Comme @flori l'a déjà mentionné, cette méthode fonctionne bien avec le bouton de retour du navigateur.
Enfin, le déclenchement de l'événement juste après avoir défini l'auditeur aidera également à afficher le bon onglet lors du chargement de la page.
la source
Ma solution à votre problème:
Ajoutez d'abord un nouvel
data-value
attribut à chaquea
lien, comme ceci:Deuxièmement, changez les identifiants des onglets, par exemple de
add
àtab-add
, mettez également à jour hrefs pour inclure letab-
préfixe:Et enfin le code js:
Voici jsFiddle - mais cela ne fonctionne pas à cause de l'iframe utilisé par jsFiddle, mais vous pouvez lire la source de ma solution.
la source
Même problème avec CakePHP avec Bootstrap 3 Tabs, plus quand j'envoie avec une URL externe et une ancre, il saute à la section perdant mon menu, après examen de nombreuses solutions ont fait ceci ...
merci à: http://ck.kennt-wayne.de/2012/dec/twitter-bootstrap-how-to-fix-tabs
la source
Il existe également un moyen simple de réagir aux changements de hachage (par exemple, le bouton de retour). Ajoutez simplement un écouteur d'événement hashchange à la solution tomaszbak:
la source
J'utilise Bootstrap 3.3. * Et aucune des solutions ci-dessus ne m'a aidé, même marqué comme réponse un. Je viens d'ajouter le script ci-dessous et j'ai travaillé.
J'espère que cela vous aide.
la source
Le plus simple, en supposant que vous utilisez le document
data-toggle="tab"
syntaxe décrite ici :la source
Pour ceux qui utilisent Ruby on Rails ou tout autre script côté serveur, vous souhaiterez utiliser l'
anchor
option sur les chemins. En effet, une fois la page chargée, le hachage d'URL n'est pas disponible. Vous voudrez fournir le bon onglet via votre lien ou la soumission de formulaire.Si vous utilisez un préfixe pour empêcher la fenêtre de sauter à l'ID:
Ensuite, vous CoffeeScript:
Ou JavaScript:
Cela devrait fonctionner dans Bootstrap 3.
la source
Merci à @tomaszbak pour la solution originale cependant, puisque mes modifications ont été rejetées et que je ne peux pas encore commenter son message, je vais laisser ma version légèrement améliorée et plus lisible ici.
Il fait essentiellement la même chose, mais corrige le problème de compatibilité entre navigateurs que j'avais avec le sien.
la source
Voici une option
history.pushState
qui vous permet d'utiliser l'historique de votre navigateur pour revenir à un onglet précédentla source
Aucun de ces éléments n'a fonctionné pour moi, alors voici comment j'ai fait fonctionner le mien:
class="tab-link"
à tous les liens nécessitant cette fonctionnalitéla source
J'ai compris qu'OP disait utiliser JQuery mais vous pouvez simplement utiliser vanilla JS pour le faire:
la source
Cela corrige également un onglet extrêmement obscur qu'un href ne se déclenche pas lors de l'utilisation de jquery et bootstrap
la source