アクティブなタブ変更のためのBootstrap 3 jqueryイベント


286

ブートストラップ3のタブ/ナビゲーションバーのタブが変更され、文字どおりすべての google spatの提案が間違っている/機能しなかったときに、関数を実行しようとして非現実的な時間を費やしました。

これについてどうやって行くの?

メタ編集:コメントを参照


3
これは本当に役に立ちました!特定のタブのみを監視したい場合は、$( "a [href = '#tab_name']")。on( 'shown.bs.tab'、fn)を監視できます。 a [href = '#tab_name']が一意であるとは限りません。
msanjay 2014年


@rogerdpack ' stackoverflow.com/questions/13164239/… 'はリダイレクトするのが混乱しているようです。質問者が間違った道をたどり、その範囲内で回答を探しました。質問は長すぎて具体的で、受け入れられた回答はそれを反映しているようです。それは確かに私の質問に対する有効な答えではありません。多くの人がおそらくそれに関係しているので、この質問は役に立たなかったという事実。
Gerben Rampaart 2017

回答:


451

エリックソープはそれを行う方法を知っています

$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
  var target = $(e.target).attr("href") // activated tab
  alert(target);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>

<ul id="myTab" class="nav nav-tabs">
  <li class="active"><a href="#home" data-toggle="tab">Home</a></li>
  <li class=""><a href="#profile" data-toggle="tab">Profile</a></li>
</ul>
<div id="myTabContent" class="tab-content">
  <div class="tab-pane fade active in" id="home">
    home tab!
  </div>
  <div class="tab-pane fade" id="profile">
    profile tab!
  </div>
</div>


どうもありがとう、あなたの答えを見つける前にこれにかなりの時間を費やしました。
Hajjat

1
変更イベントを使用する必要がある場合は(リンクからのアクションに関係なく)、次のように使用します$(document).on('shown.bs.tab', function (e) { console.log('ae'); });
Aline Matos

完璧です。これで多くの時間を節約できました。
ジャスティン

これには少し疑問があります。target上記のようにグローバル変数として宣言し、値を割り当てました。最初にページをロードしたとき、ターゲットの値(アラート)が未定義として取得されます。しかし、タブを変更してその値をターゲットに割り当てても、アラートが表示されません。エラーメッセージすらありません。ループの外に出すにはどうすればよいですか?document.ready関数の外で変数を宣言しました。
SSS

これは、別のタブをクリックした場合にのみ機能します。デフォルトのタブにそのトリガーを追加するにはどうすればよいですか?すべてのタブでajaxをロードする必要があります。しかし、これを使用すると、別のタブをクリックして最初のタブをクリックしたときにのみロードされます。
KārlisJanisels

89
$(function () {
    $('#myTab a:last').tab('show');
});

$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
    var target = $(e.target).attr("href");
    if ((target == '#messages')) {
        alert('ok');
    } else {
        alert('not ok');
    }
});

問題は、attr( 'href')が決して空にならないことです。

または、#id = "#some value"を比較してから、ajaxを呼び出します。


はい、ただattr( 'href')は決して空ではありません。タブのIDを返します。
Florin

1
わかります。みんなへの私のコメントは 'shown.bs.tab'ビットに焦点を当てたと思います。私はそれを追跡するのに本当に苦労しました。
Gerben Rampaart 2013

1
Okok ...追加:空のセレクター。
Gerben Rampaart 2013

ありがとう。魔法のように!
ダニ・エレラ

@Florinありがとうございます。私の問題はあなたの関数で解決されました。お気に入り!
Aiyoub Amini 2017

32

@Gerbenの投稿のおかげで、ドキュメントで説明されているように、show.bs.tab(タブが表示される前)とshown.bs.tab(タブが表示された後)の2つのイベントがあることがわかりました- ブートストラップタブの使用法

特定のタブのみに関心があり、ifを追加する必要なしに個別の関数を追加する場合の追加の解決策-1つの関数のelseブロックは、a hrefセレクターを使用することです(必要に応じて追加のセレクターと一緒に使用することもできます)。

 $("a[href='#tab_target_id']").on('shown.bs.tab', function(e) {
      console.log('shown - after the tab has been shown');
 });

 // or even this one if we want the earlier event
 $("a[href='#tab_target_id']").on('show.bs.tab', function(e) {
      console.log('show - before the new tab has been shown');
 });

デモ


素晴らしい解決策、タブ表示イベントの後にキャッチして角度関数を呼び出す必要があります。この解決策により、数時間節約できました。
アレン

10

Mosh Feuの回答に追加するには、タブがその場で作成された場合、私の場合のように、次のコードを使用します

$(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
    var tab = $(e.target);
    var contentId = tab.attr("href");

    //This check if the tab is active
    if (tab.parent().hasClass('active')) {
         console.log('the tab with the content id ' + contentId + ' is visible');
    } else {
         console.log('the tab with the content id ' + contentId + ' is NOT visible');
    }

});

これが誰かに役立つことを願っています


8

これでうまくいきました。

$('.nav-pills > li > a').click( function() {
    $('.nav-pills > li.active').removeClass('active');
    $(this).parent().addClass('active');
} );

私にとっては完璧に機能します。
MattD 2014年

1
これは、ブートストラップのデフォルトのタブ機能をハイジャックします。これを行う必要がある場合、タブは初期​​化されていません。
Archonic、2015年

2
これは「ハック」な方法であり、回避する必要があります。
Juni Brosas

2

別のアプローチを使用します。

いくつかの部分文字列から始まるすべてのa場所を見つけるようにしてください。id

JS

$('a[id^=v-photos-tab]').click(function () {
     alert("Handler for .click() called.");
});

HTML

<a class="nav-item nav-link active show"  id="v-photos-tab-3a623245-7dc7-4a22-90d0-62705ad0c62b" data-toggle="pill" href="#v-photos-3a623245-7dc7-4a22-90d0-62705ad0c62b" role="tab" aria-controls="v-requestbase-photos" aria-selected="true"><span>Cool photos</span></a>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.