활성 탭 변경을위한 부트 스트랩 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.