您可以在Bootstrap中禁用标签页吗?


Answers:


188

您可以data-toggle="tab"使用实时/委托事件将属性从标签中删除,因为它已被关联


11
谢谢工作了,还添加了CSS“ cursor:no-drop;”。光标,所以使用知道他们为什么不能单击它
arbme 2012年

23
游标:不允许;在这种情况下更合适。除非您实际上是拖放。
Christophe Geers

9
或向li添加一个残障人士课程
Pencilcheck

6
您需要使用以上两个建议:将<disabled>类添加到<li>并从选项卡中删除data-toogle或href属性
Scabbia 2014年

9
我只是添加了此CSS,现在class="disabled"可以按预期工作了.nav.nav-tabs > li.disabled { pointer-events: none; a { color: silver; } }
effe 2015年

49

从2.1开始,您可以从http://twitter.github.com/bootstrap/components.html#navs的引导程序文档中进行操作。

禁用状态

对于任何导航组件(标签,药丸或列表),请添加.disabled以显示灰色链接,并且没有悬停效果。但是,除非删除href属性,否则链接将保持可单击状态。或者,您可以实施自定义JavaScript来防止这些点击。

有关功能添加的讨论,请参见https://github.com/twitter/bootstrap/issues/2764


1
这是主要功能之一,令我感到
困惑的

它在v3中实现
Jeroen K

8
是的,但是链接仍然可以单击。
svlada 2014年

3
确实,到目前为止,可行的解决方案是删除data-toggle属性。
西里尔N.14

34

我添加了以下Javascript以防止点击禁用的链接:

$(".nav-tabs a[data-toggle=tab]").on("click", function(e) {
  if ($(this).hasClass("disabled")) {
    e.preventDefault();
    return false;
  }
});

9
我认为这和@hotzu的回应相结合应该是答案。您应该将disabled类添加到li元素,然后添加指定的javascript,除了要检查的条件是:if ($(this).parent().hasClass('disabled')) {..}
im1dermike 2014年

@ im1dermike我不明白为什么要这么做?
totas 2014年

旧问题,但这是我找到的,所以我添加了这个。您将执行此检查,因为li改变用户视觉效果的是什么,因此应该改变disabled类。
杰瑞德(Jared)

23

我认为最好的解决方案是禁用CSS。您定义一个新类,然后关闭其上的鼠标事件:

.disabledTab{
    pointer-events: none;
}

然后将此类分配给所需的li元素:

<li class="disabled disabledTab"><a href="#"> .... </a></li>

您也可以使用jQuery添加/删除类。例如,要禁用所有选项卡:

$("ul.nav li").removeClass('active').addClass('disabledTab');

这是一个示例:jsFiddle


thnx @hotzu你让我的日子变得轻松.. :)
Gaurav Singh

我强烈建议反对。因为仅css解决方案使选项卡可点击。如果还有其他事件在监听这些点击,则将执行这些事件,这不是期望的结果。(我猜是吗?)
Dementic

就我而言,这是成功的秘诀。我建立了一个包含多个标签的表单。转到下一个选项卡是通过按钮完成的,该按钮触发该选项卡上的单击事件。因此,完全禁用单击不是我的选择,但是从选项卡中删除指针事件正是我所需要的。
塞巴斯蒂安

17

不需要任何jQuery,只需一行CSS

.nav-tabs li.disabled a {
    pointer-events: none;
}

1
我必须在li.disabled(不是li.disabled a)上执行此操作
Daniel

10

另外,我正在使用以下解决方案:

$('a[data-toggle="tab"]').on('click', function(){
  if ($(this).parent('li').hasClass('disabled')) {
    return false;
  };
});

现在,您只向父级li添加了“ disabled”类,并且制表符不起作用并变为灰色。


6

古老的问题,但这有点向我指出了正确的方向。我追求的方法是将禁用的类添加到li中,然后将以下代码添加到我的Javascript文件中。

$('.nav-tabs li.disabled > a[data-toggle=tab]').on('click', function(e) {
    e.stopImmediatePropagation();
});

这将禁用li具有禁用类的任何链接。有点类似于totas的答案,但是如果用户每次单击任何选项卡链接并且不使用return false,它将不会运行。

希望它对某人有用!


1
好!但在e.stopImmediatePropagation()之前需要e.preventDefault()
meuwka 2014年

6

对于我来说,最好的解决方案是将以下一些答案混合在一起:

  • disabled类添加到我要禁用的li中
  • 添加这段JS:

       `$(".nav .disabled>a").on("click", function(e) {
            e.preventDefault();
            return false;
        });`
  • 如果您希望Bootstrap完全不干扰您的代码,甚至可以删除data-toggle =“ tab”属性。

****注意**:**即使您删除了数据切换,这里的JS代码也很重要,因为否则,它会通过向#your-id其中添加值来更新URL,不建议这样做,因为您的标签页已禁用,因此不应访问。


4

随着唯一的CSS,你可以定义两个CSS类。

<style type="text/css">
    /* Over the pointer-events:none, set the cursor to not-allowed.
    On this way you will have a more user friendly cursor. */
    .disabledTab {
        cursor: not-allowed;
    }
    /* Clicks are not permitted and change the opacity. */
    li.disabledTab > a[data-toggle="tab"] {
        pointer-events: none;
        filter: alpha(opacity=65);
        -webkit-box-shadow: none;
        box-shadow: none;
        opacity: .65;
    }
</style>

这是一个html模板。唯一需要做的就是将类设置为您的首选列表项。

<ul class="nav nav-tabs tab-header">
    <li>
        <a href="#tab-info" data-toggle="tab">Info</a>
    </li>
    <li class="disabledTab">
        <a href="#tab-date" data-toggle="tab">Date</a>
    </li>
    <li>
        <a href="#tab-photo" data-toggle="tab">Photo</a>
    </li>
</ul>
<div class="tab-content">
    <div class="tab-pane active" id="tab-info">Info</div>
    <div class="tab-pane active" id="tab-date">Date</div>
    <div class="tab-pane active" id="tab-photo">Photo</div>
</div>

2

假设这是您的TAB,并且您要禁用它

<li class="" id="groups"><a data-toggle="tab" class="navuserli" href="#groups" aria-expanded="false">Groups</a></li>

因此,您还可以通过添加动态CSS来禁用此标签

$('#groups').css('pointer-events', 'none')

1

除了詹姆斯的答案:

如果您需要禁用链接,请使用

$('a[data-toggle="tab"]').addClass('disabled');

如果需要防止禁用的链接加载选项卡

$('a[data-toggle="tab"]').click(function(e){

            if($this.hasClass("disabled")){

                e.preventDefault();

                e.stopPropagation();

                e.stopImmediatePropagation();

                return false;

            }
}

如果您需要无法链接

$('a[data-toggle="tab"]').removeClass('disabled');

0

我尝试了所有建议的答案,但最终我使它像这样工作

if (false) //your condition
{
    $("a[data-toggle='tab'").prop('disabled', true);
    $("a[data-toggle='tab'").each(function () {
        $(this).prop('data-href', $(this).attr('href')); // hold you original href
        $(this).attr('href', '#'); // clear href
    });                
    $("a[data-toggle='tab'").addClass('disabled-link');
}
else
{
    $("a[data-toggle='tab'").prop('disabled', false);
    $("a[data-toggle='tab'").each(function () {
        $(this).attr('href', $(this).prop('data-href')); // restore original href
    });
    $("a[data-toggle='tab'").removeClass('disabled-link');
}
// if you want to show extra messages that the tab is disabled for a reason
$("a[data-toggle='tab'").click(function(){
   alert('Tab is disabled for a reason');
});

0

没有答案对我有用。data-toggle="tab"从中删除a阻止选项卡激活,但它还会添加#tabId哈希到URL。这对我来说是不可接受的。使用javascript也是不可接受的。

起作用的方法是将disabled类添加到中,li并删除href其中包含的属性a


现在,我进一步阅读了一下,这基本上也和@Scott Stafford的答案是完全相同的,后者在2年前就回答了……
Jim

0

我的标签位于面板中,因此我向标签锚添加了class ='disabled'

在JavaScript中我添加了:

$(selector + ' a[data-toggle="tab"]').on('show.bs.tab', function (e) {
    if ($(this).hasClass('disabled')){
        e.preventDefault();
        return false;
    }
})

为了减少展示,我添加了:

.panel-heading{
    display:table;
    width:100%;
    padding-bottom:10px;
    ul.nav-tabs{
        display:table-cell;
        vertical-align:bottom;
        a.disabled{
            .text-muted;
            cursor:default;
            &:hover{
                background-color:transparent;
                border:none;
            }
        }
    }
}

0

避免这种情况的最简单,最干净的解决方案是添加 onclick="return false;"a标签中。

<ul class="nav nav-tabs">
    <li class="active">
        <a href="#home" onclick="return false;">Home</a>
    </li>    
    <li>
        <a href="#ApprovalDetails" onclick="return false;">Approval Details</a>
    </li>
</ul>
  • 添加"cursor:no-drop;"只会使光标看起来处于禁用状态,但可以单击,Url会附加href目标,例如page.apsx#Home
  • 无需将"disabled"类添加到<li>AND删除href

0

您可以通过将类添加disabled到nav-item的子项来禁用引导程序4中的选项卡,如下所示

<li class="nav-item">
    <a class="nav-link disabled" data-toggle="tab" href="#messages7" role="tab" aria-expanded="false">
        <i class="icofont icofont-ui-message"></i>Home</a>
    <div class="slide"></div>
</li>

-1

这是我的尝试。禁用标签:

  1. 在标签的LI中添加“禁用”类;
  2. 从LI> A移除'data-toggle'属性;
  3. 抑制LI> A上的“单击”事件。

码:

var toggleTabs = function(state) {
    disabledTabs = ['#tab2', '#tab3'];
    $.each(disabledTabs, $.proxy(function(idx, tabSelector) {
        tab = $(tabSelector);
        if (tab.length) {
            if (state) {
                // Enable tab click.
                $(tab).toggleClass('disabled', false);
                $('a', tab).attr('data-toggle', 'tab').off('click');
            } else {
                // Disable tab click.
                $(tab).toggleClass('disabled', true);
                $('a', tab).removeAttr('data-toggle').on('click', function(e){
                    e.preventDefault();
                });
            }
        }
    }, this));
};

toggleTabs.call(myTabContainer, true);
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.