ブートストラップのタブを無効にできますか?


回答:


188

data-toggle="tab"ライブ/デリゲートイベントを使用して接続されているため、タブから属性を削除できます


11
ありがとう、ごちそうをいただきました。css "cursor:no-drop;"も追加しました。カーソルの場合は、なぜクリックできないのかがわかるので、使用
2012

23
カーソル:許可されていません。この場合、より適切です。実際にドラッグアンドドロップしている場合を除きます。
Christophe Geers、2012

9
または無効なクラスをliに追加する
Pencilcheck

6
上記の両方の提案を使用する必要があります。「無効」クラスを<li>に追加し、data-toogleまたはhref属性をタブから削除します
Scabbia

9
私は単純に、このCSSを追加し、今でclass="disabled"期待通りに動作します.nav.nav-tabs > li.disabled { pointer-events: none; a { color: silver; } }
EFFE

49

2.1以降では、http://twitter.github.com/bootstrap/components.html#navsにあるブートストラップのドキュメントから、これを行うことができます。

無効状態

ナビゲーションコンポーネント(タブ、ピル、またはリスト)の場合、灰色のリンクに.disabledを追加し、ホバー効果なし。ただし、href属性を削除しない限り、リンクはクリック可能なままです。または、カスタムJavaScriptを実装して、これらのクリックを防止することもできます。

機能追加の説明については、https://github.com/twitter/bootstrap/issues/2764を参照してください


1
これは主要な機能の1つであり、まだ実装されていません
DS_web_developer 2013

v3で実装されています
Jeroen K

8
はい。ただし、リンクは引き続きクリック可能です。
svlada 2014年

3
まさに、これまでの実行可能な解決策は、data-toggle属性を削除することです。
Cyril N.

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

@ 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 uが簡単に私の一日が.. :)製
のGauravシン

私はそれを強くお勧めします。cssのみのソリューションはタブをクリック可能にするためです。これらのクリックをリッスンする他のイベントがある場合、それらは実行されますが、これは望ましい結果ではありません。(私は推測しますか?)
認知症の

私の場合、これでうまくいきました。複数のタブで構成されるフォームを作成しました。次のタブに移動するには、ボタンを使用します。ボタンをクリックすると、そのタブでクリックイベントがトリガーされます。したがって、クリックを完全に無効にすることは私には選択肢ではありませんが、タブからポインターイベントを削除するだけで十分でした。
セバスチャン2016

17

jqueryは不要、1行の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およびtabに「無効」クラスを追加するだけでは機能せず、灰色になります。


6

古い質問ですが、それは私に正しい方向を示しました。私が行った方法は、無効にされたクラスをliに追加し、次のコードをJavascriptファイルに追加することでした。

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

これにより、liのクラスが無効になっているリンクが無効になります。一種のtotasの回答に似ていますが、ユーザーがタブリンクをクリックするたびにifが実行されず、return falseを使用しません。

うまくいけば、誰かに役立つでしょう!


1
良い!e.stopImmediatePropagation()の前にe.preventDefault()が必要
meuwka

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、次の2つの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

これがあなたのタブであり、それを無効にしたいとします

<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


私がさらに読んだところで、これはまた、2年前に回答した@Scott Staffordからの回答と基本的に同じ正確な回答です...
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には、exのhrefターゲットが追加されます。page.apsx#Home
  • ANDに"disabled"クラスを追加したり<li>削除したりする必要はありません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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.