활성 탭 변경을위한 부트 스트랩 3 jquery 이벤트


286

부트 스트랩 3 탭 / 탐색 모음의 탭이 변경되고 말 그대로 구글 스 패트 아웃 된 모든 제안이 잘못되었거나 작동하지 않았을 때 함수를 실행하려고하는 데 비현실적인 시간을 보냈습니다 .

어떻게해야합니까?

메타 편집 : 의견보기


3
이것은 정말 유용했습니다! 특정 탭에 대해서만주의를 기울이려면 $ ( "a [href = '# tab_name']"). on ( 'shown.bs.tab', fn)을 볼 수 있습니다. 물론 다음과 같은 경우 추가 선택기를 지정할 수 있습니다. a [href = '# tab_name']은 고유하지 않을 수도 있습니다.
msanjay


@ rogerdpack ' stackoverflow.com/questions/13164239/… '로 리디렉션하는 것이 혼란스러워 보이며, 질문자가 잘못된 경로를 가져 와서 범위 내에서 답변을 찾았습니다. 질문이 너무 길고 구체적이며 허용 된 답변이 반영 된 것으로 보입니다. 확실히 내 질문에 대한 올바른 답변이 아닙니다. 이 질문은 많은 사람들이 그와 관련되어 있기 때문에 도움이되지 않았다는 사실.
Gerben Rampaart

답변:


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

다른 탭을 클릭 한 경우에만 작동합니다. 기본 탭에 해당 트리거를 추가하는 방법은 무엇입니까? 모든 탭에 아약스를로드해야합니다. 그러나 이것으로 다른 탭을 클릭 한 다음 첫 번째 탭을 다시 클릭하면로드됩니다.
Kārlis Janisels

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"를 비교 한 다음 아약스를 호출하십시오.


예, 그냥 attr ( 'href')는 결코 헛되지 않습니다. 탭의 ID를 반환합니다.
Florin

1
이해 했어요. 모든 사람들에게 내 의견은 'shown.bs.tab'비트에 중점을 둔 것으로 생각합니다. 나는 그것을 추적하기가 정말 힘들었습니다.
Gerben Rampaart

1
Okok ... 추가 : 빈 선택기.
Gerben Rampaart

감사. 매력처럼!
dani herrera

@Florin 감사합니다. 내 문제는 귀하의 기능으로 해결되었습니다. 처럼!
Aiyoub Amini

32

@Gerben의 게시물 덕분에 문서- 부트 스트랩 탭 사용법에 설명 된대로 show.bs.tab (탭이 표시되기 전에)과 shown.bs.tab (탭이 표시된 후)이라는 두 가지 이벤트가 있음을 알게되었습니다.

특정 탭에만 관심이 있고 하나의 함수에 if-else 블록을 추가하지 않고도 별도의 함수를 추가하는 경우 추가 솔루션은 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');
 });

데모


훌륭한 솔루션, 나는 탭 쇼 이벤트 후에 붙잡아 내 각도 함수를 호출해야합니다.이 솔루션은 몇 시간을 절약했습니다!
Allen

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

1
이 하이 잭 부트 스트랩 기본 탭 기능. 이 작업을 수행해야하는 경우 탭이 초기화되지 않습니다.
Archonic

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.