使用JQuery激活Bootstrap选项卡


79

我有以下代码:

<ul class="nav nav-tabs">
    <li><a href="#aaa" data-toggle="tab">AAA</a></li>
    <li><a href="#bbb" data-toggle="tab">BBB</a></li>
    <li><a href="#ccc" data-toggle="tab">CCC</a></li>
</ul>
<div class="tab-content" id="tabs">
    <div class="tab-pane" id="aaa">...Content...</div>
    <div class="tab-pane" id="bbb">...Content...</div>
    <div class="tab-pane" id="ccc">...Content...</div>
</div>

和以下脚本:

$(document).ready(function(){
    activaTab('aaa');
});

function activaTab(tab){
    $('.tab-pane a[href="#' + tab + '"]').tab('show');
};

在这种情况下,当页面准备就绪时,第二个选项卡将被激活,但是我总是在该行中遇到JavaScript错误 $('.tab-pane a[href="#' + tab + '"]').tab();

有人可以帮我吗?


1
你有什么错误?
Oyeme

我想你想$('.nav-tabs a[href="#' + tab + '"]').tab('show');吧?此外,ids不能以数字开头。
Petr R.

1
为什么不使用bootstrap.js?只需要在HTML中包含boostrap.js
codedme,2013年

错误是对象不接受此属性或方法。我页面中的ID不能以数字开头。这是我的错误,这只是一个例子。Bootstrap.js包含在页面中
user2607411 2013年

$('。nav-tabs a [href =“#'+ tab +'”]')。tab('show'); 没用。我编辑ID更改的帖子
2013年

Answers:


179

.nav-tabs看来应用选择器似乎是可行的:请参阅此演示

$(document).ready(function(){
    activaTab('aaa');
});

function activaTab(tab){
    $('.nav-tabs a[href="#' + tab + '"]').tab('show');
};

我希望使用@codedme的答案,因为如果您知道在页面加载之前要使用哪个选项卡,则可能应该更改页面html而不是将JS用于此特定任务。

我也调整了演示以获得他的答案。

(如果这不适用于您,请指定您的设置-浏览器,环境等)


以及引导程序。在模板中,我添加了所有引导js(包括jquery.js)。我在导入时可以遇到任何问题吗?其他引导程序组件(如模式面板)也可以正常工作
user2607411 2013年

您有网页的实时版本吗?
MasterAM

抱歉,MasterAM没有任何实时版本。似乎我bootstrap.js有问题。我在页面中添加了jquery.js,bootstrap.js,jsf和richfaces js。所有对.tab()的引用都始终返回js错误
user2607411 2013年

尝试删除一些部分,直到获得页面的相关部分。然后,使用页面的一小部分,您应该更容易确定故障的原因。
MasterAM

1
我更新了jsFiddles,因为自您发布此答案以来,引导程序URL已更改。
Mike

24

页面准备就绪时,请单击指向选项卡锚的链接,即

$('a[href="' + window.location.hash + '"]').trigger('click');

或在普通JavaScript中

document.querySelector('a[href="' + window.location.hash + '"]').click();

简单的解决方案,直截了当。对于可能有问题的人员,请将其包装到文档就绪功能中。即$(document).ready(function(){ $('a[href="' + window.location.hash + '"]').trigger('click'); });
Julius


10
<div class="tabbable">
<ul class="nav nav-tabs">
    <li class="active"><a href="#aaa" data-toggle="tab">AAA</a></li>
    <li><a href="#bbb" data-toggle="tab">BBB</a></li>
    <li><a href="#ccc" data-toggle="tab">CCC</a></li>
</ul>
<div class="tab-content" id="tabs">
    <div class="tab-pane fade active in" id="aaa">...Content...</div>
    <div class="tab-pane" id="bbb">...Content...</div>
    <div class="tab-pane" id="ccc">...Content...</div>
</div>
</div>   

将活动类添加到页面加载后要活动的任何li元素。并且还需要向内容div添加活动类,淡入类对于平滑过渡很有用。


我需要根据情况激活一个选项卡。并非总是如此,页面加载时将选择第一个选项卡
user2607411 2013年

我认为您还应该给内容潜水active课。
MasterAM

@MasterAM是的,你是对的,也褪色类,以便顺利过渡.Edited
codedme

我将class =“ active”添加到第一个标签,但是javascript错误并未消失。该选项卡采用活动样式,但未显示内容
user2607411 2013年

我编辑了代码,请使用此代码。您还需要将活动类添加到content div元素。
codedme

9

将id属性添加到html标签

<ul class="nav nav-tabs">
    <li><a href="#aaa" data-toggle="tab" id="tab_aaa">AAA</a></li>
    <li><a href="#bbb" data-toggle="tab" id="tab_bbb">BBB</a></li>
    <li><a href="#ccc" data-toggle="tab" id="tab_ccc">CCC</a></li>
</ul>
<div class="tab-content" id="tabs">
    <div class="tab-pane" id="aaa">...Content...</div>
    <div class="tab-pane" id="bbb">...Content...</div>
    <div class="tab-pane" id="ccc">...Content...</div>
</div>

然后使用JQuery

$("#tab_aaa").tab('show');

2

刚刚为此苦苦挣扎-我将解释我的情况。

我的选项卡位于引导程序模式中,并在加载时设置以下内容(在触发模式之前):

$('#subMenu li:first-child a').tab('show');

选择选项卡时,实际的窗格不可见。因此,您还需要将active类添加到窗格中:

$('#profile').addClass('active');

在我的情况下,窗格具有#profile(但是很容易成为.pane:first-child),然后显示正确的窗格。


0

为什么不先选择活动的标签,然后再选择选定的标签内容?
1.首先将类'active'添加到tab的<li>元素中。
2.然后使用set'active'类来选择div。

    $(document).ready( function(){
        SelectTab(1); //or use other method  to set active class to tab
        ShowInitialTabContent();

    });
    function SelectTab(tabindex)
    {
        $('.nav-tabs li ').removeClass('active');
        $('.nav-tabs li').eq(tabindex).addClass('active'); 
        //tabindex start at 0 
    }
    function FindActiveDiv()
    {  
        var DivName = $('.nav-tabs .active a').attr('href');  
        return DivName;
    }
    function RemoveFocusNonActive()
    {
        $('.nav-tabs  a').not('.active').blur();  
        //to >  remove  :hover :focus;
    }
    function ShowInitialTabContent()
    {
        RemoveFocusNonActive();
        var DivName = FindActiveDiv();
        if (DivName)
        {
            $(DivName).addClass('active'); 
        } 
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.