4

我有一个 twitter 引导标签组件。

我希望两个选项卡成为表单的一部分。第三个不是。

所以我想,我只需将两个选项卡包装在一个表单中。

但它不起作用:http: //jsfiddle.net/gLrr4/1/

基本上,虽然类被应用于正确的元素,但似乎表单正在阻止相应的选项卡改变它们的可见性。

我怎样才能解决这个问题?

演示: http: //jsfiddle.net/gLrr4/1/
演示代码:

<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>​
4

3 回答 3

4

行,

找到了解决方案:

使用一点 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');
});

还有一点css:

.tab-content > form > .tab-pane,
.pill-content > form > .pill-pane {
    display: none;
}
.tab-content > form > .active,
.pill-content > form > .active {
    display: block;
}

我们现在可以在表单中嵌套选项卡,当然这仅支持表单标签,不支持任何子标签,
我可以通过删除 's 使其支持任何元素,>但问题是如果我们有嵌套的选项卡,那将会级联!

于 2012-09-19T23:49:54.510 回答
2

是的,答案有点长,但请耐心等待 - 有两个问题需要“修复”才能使其正常工作......

第一个问题:前两个标签同时显示。

原因:boostrap.css(未缩小)第 4042 和 4047 行仅选择 div 的直接后代:

.tab-content > .tab-pane

.tab-content > .active

解决方法:将以下 CSS 添加到单独的 CSS 文件中:

.tab-content .tab-pane
{
  display: none;
}

.tab-content .active
{
  display: block;
}

第二个问题:第三个选项卡现在总是在单击并选择另一个选项卡后显示。

原因:这是因为当 boostrap 从尚未单击的选项卡中清除“活动”类时,它只查找容器的直接后代。在 bootstrap.js 的第 1563 行:

var $active = container.find('> .active')

解决方案:要解决此问题,您需要将此行更改为:

var $active = container.find('.active')

然而,这并不理想。因此,如果您不想更改引导代码,您可以...

  • 复制第 1510 行和第 1624 行之间的所有引导选项卡内容
  • 将所有出现的 重命名TabNewTab
  • $.fn.tab从第 1602 行更改为$.fn.modifiedTab或类似
  • (data = new Tab(this))从第 1606 行更改为(data = new NewTab(this))
  • 按照文档使用它,但.tab变成.modifiedTab

希望有帮助:)

于 2012-09-19T23:45:58.127 回答
0

我希望这是您正在寻找的,这是链接http://jsfiddle.net/gLrr4/2/

似乎将表单标签放在 div-tab 内容之外使其工作。

于 2012-09-19T23:27:30.293 回答