【问题标题】:Add / Remove Tabs Dynamically in Bootstrap - Make created tab active在 Bootstrap 中动态添加/删除选项卡 - 使创建的选项卡处于活动状态
【发布时间】:2014-07-12 00:38:13
【问题描述】:

这里是动态添加/删除引导选项卡的 sn-p。一切正常,但我希望新创建的选项卡处于活动状态并处于焦点,而不是用于动态添加选项卡的选项卡。

这是小提琴:http://jsfiddle.net/isherwood/F33Av/4/

这是有问题的代码:

HTML:

<div class="container">
    <ul class="nav nav-tabs">
        <li class="active"><a href="#contact_01" data-toggle="tab">Joe Smith</a><span>x</span></li>
        <li><a href="#contact_02" data-toggle="tab">Molly Lewis</a><span>x</span> </li>
        <li><a href="#" class="add-contact" data-toggle="tab">+ Add Contact</a></li>
    </ul>
    <div class="tab-content">
        <div class="tab-pane active" id="contact_01">Contact Form: Joe Smith</div>
        <div class="tab-pane" id="contact_02">Contact Form: Molly Lewis</div>
    </div>
</div>

JS:

$(".nav-tabs").on("click", "a", function(e){
      e.preventDefault();
      $(this).tab('show');
    })
    .on("click", "span", function () {
        var anchor = $(this).siblings('a');
        $(anchor.attr('href')).remove();
        $(this).parent().remove();
        $(".nav-tabs li").children('a').first().click();
    });

    $('.add-contact').click(function(e) {
        e.preventDefault();
        var id = $(".nav-tabs").children().length; //think about it ;)
        $(this).closest('li').before('<li><a href="#contact_'+id+'">New Tab</a><span>x</span></li>');         
        $('.tab-content').append('<div class="tab-pane" id="contact_'+id+'">Contact Form: New Contact '+id+'</div>');
});

CSS:

@import url('http://getbootstrap.com/2.3.2/assets/css/bootstrap.css');

.container {
    margin-top: 10px;
}

.nav-tabs > li {
    position:relative;    
}

.nav-tabs > li > a {
    display:inline-block;
}

.nav-tabs > li > span {
    display:none;
    cursor:pointer;
    position:absolute;
    right: 6px;
    top: 8px;
    color: red;
}

.nav-tabs > li:hover > span {
    display: inline-block;
}

【问题讨论】:

标签: javascript jquery twitter-bootstrap tabs


【解决方案1】:

这是一个解决方案:

See JSFiddle

  1. 单击“添加联系人”导航链接时,仍会调用tab('show')。即使调用了显示选项卡功能,也不会显示选项卡内容,因为它没有链接到它的现有内容。我所做的是添加一个条件来停止激活该选项卡。

    $(".nav-tabs").on("click", "a", function (e) {
         e.preventDefault();
         if (!$(this).hasClass('add-contact')) {
             $(this).tab('show');
         }
    })
    
  2. 我还删除了“添加联系人”导航链接的 data-toggle="tab" 属性。出于某种原因,它会激活“添加联系人”选项卡(如果有)。

    <li><a href="#" class="add-contact">+ Add Contact</a></li>
    
  3. 添加新标签后,触发新标签的click,以便调用tab('show')函数。 (见 1

    $('.add-contact').click(function (e) {
         e.preventDefault();
         var id = $(".nav-tabs").children().length; //think about it ;)
         var tabId = 'contact_' + id;
         $(this).closest('li').before('<li><a href="#contact_' + id + '">New Tab</a> <span>x</span></li>');
         $('.tab-content').append('<div class="tab-pane" id="' + tabId + '">Contact Form: New Contact ' + id + '</div>');
    
         // add this
         $('.nav-tabs li:nth-child(' + id + ') a').click();
    });
    

【讨论】:

  • 我看到了演示并尝试删除标签,它确实删除了标签。但是,无法理解它是如何从标签内容中删除相应的 DIV 的!?你能开导吗?
  • @MilindThakkar 嗨,删除选项卡来自 OP 的问题。在 JSFiddle 中,它位于第 7-12 行。删除内容后,我们在第一个选项卡上'click'
【解决方案2】:

这是我找到的另一个解决方案:

JavaScript:

$('#btnAdd').click(function (e) {
    var nextTab = $('#tabs li').size()+1;

    // create the tab
    $('<li><a href="#tab'+nextTab+'" data-toggle="tab">Tab '+nextTab+'</a></li>').appendTo('#tabs');

    // create the tab content
    $('<div class="tab-pane" id="tab'+nextTab+'">tab' +nextTab+' content</div>').appendTo('.tab-content');

    // make the new tab active
    $('#tabs a:last').tab('show');
});

HTML:

<div class="container">
    <h1>Bootstrap Dynamic Tabs</h1>
    <div class="well">

        <a href="#" id="btnAdd"><i class="icon-plus-sign-alt"></i>Add Tab</a>
        <br><br>
        <ul class="nav nav-tabs" id="tabs">
            <li class="active"><a href="#tab1" data-toggle="tab">Tab 1</a></li>
        </ul>

        <div class="tab-content">
            <div class="tab-pane active" id="tab1">Hello tab #1 content...</div>
        </div>
   </div>
   <a href="http://www.bootply.com/61679">Edit on Bootply</a>..
</div>

在这里进行演示和编辑https://www.bootply.com/61679

【讨论】:

    最近更新 更多