J'ai un composant de tabulation bootstrap Twitter.
Je veux que deux des onglets fassent partie d'un formulaire. Et le troisième à ne pas l'être.
Je pensais donc que je vais simplement envelopper les deux onglets sous une forme.
Mais cela ne fonctionne pas: http://jsfiddle.net/gLrr4/1/
Fondamentalement, pendant que les classes sont appliquées aux éléments de droite, il semble que le formulaire empêche les onglets respectifs de modifier leur visibilité.
Comment puis-je réparer cela?
Demo: http://jsfiddle.net/gLrr4/1/
Code de démo:
<html> <head> <link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css" type="text/css"/> <script src='http://twitter.github.com/bootstrap/js/bootstrap-tab.js'></script> </head> <body> <div class="alert alert-error">Tab 1 and two are wrapped in a form tag!</div> <div class='row'> <div class="span12"> <div class="tabbable"> <ul class="nav nav-tabs"> <li class="active"><a href="#tab1" data-toggle="tab">#tab1</a></li> <li><a href="#tab2" data-toggle="tab">#tab2</a></li> <li><a href="#tab3" data-toggle="tab">#tab3</a></li> </ul> <div class="tab-content"> <form class="form-vertical"> <div class="tab-pane active" id="tab1"> <div class="alert alert-info"> This is #tab1 </div> <div class='form-actions'> <button type='submit' class='btn btn-primary'>Save changes</button> <button id='cancel' class='btn'>Cancel</button> </div> </div> <div class="tab-pane" id="tab2"> <div class="alert alert-info"> This is #tab2 </div> <div class='form-actions'> <button type='submit' class='btn btn-primary'>Save changes</button> <button id='cancel' class='btn'>Cancel</button> </div> </div> </form> <div class="tab-pane" id="tab3"> <div class="alert alert-info"> This is #tab3 </div> </div> </div> </div> </div> </div> </body> </html>
D'accord,
Trouvé la solution:
Avec un peu de Javascript:
$('a[data-toggle="tab"]').on('shown', function (e) { $(e.target.hash).closest('.tab-content') .find('> form > .tab-pane.active:not(' + e.target.hash + '), > .tab-pane.active:not(' + e.target.hash + ')') .removeClass('active'); });
Et un peu de css:
.tab-content > form > .tab-pane, .pill-content > form > .pill-pane { display: none; } .tab-content > form > .active, .pill-content > form > .active { display: block; }
Nous pouvons maintenant nicher les onglets sous une forme, Bien sûr, cela ne prend en charge que les balises de forme, pas tout enfant,
Je pourrais le faire supporter tout élément en supprimant les >
mais le problème est que cela tomber en cascade si nous avions des onglets imbriqués!
Juste, une longue réponse, mais supportez-moi: il y a deux problèmes qui nécessitent une «réparation» pour que cela fonctionne …
Cause : Boostrap.css (non minifiées) lignes 4042 et 4047 sélectionnez uniquement les descendants immédiats de la div:
.tab-content > .tab-pane
et
.tab-content > .active
Résolution : Ajoutez le CSS suivant à un fichier CSS distinct:
.tab-content .tab-pane { display: none; } .tab-content .active { display: block; }
Cause : c'est parce que lorsque boostrap efface la classe "active" à partir des onglets qui n'ont pas été cliqués, il ne recherche que les descendants directs du conteneur. À la ligne 1563 de bootstrap.js:
var $active = container.find('> .active')
Résolution : Pour résoudre ce problème, vous devrez modifier cette ligne vers:
var $active = container.find('.active')
Cependant, ce n'est pas idéal. Donc, si vous ne voulez pas modifier le code bootstrap, vous pouvez …
Tab
to NewTab
$.fn.tab
de la ligne 1602 à $.fn.modifiedTab
ou similaire (data = new Tab(this))
de la ligne 1606 à (data = new NewTab(this))
.tab
devient .modifiedTab
J'espère que cela pourra aider 🙂
J'espère que c'est votre recherche, voici le lien http://jsfiddle.net/gLrr4/2/
Il semblerait que le fait de prendre l'étiquette de formulaire en dehors du contenu div-tab a fait fonctionner.