Twitter 부트 스트랩 툴팁을 동적으로 생성 된 요소에 어떻게 바인딩합니까?


277

다음과 같은 자바 스크립트로 Twitter 부트 스트랩 툴팁을 사용하고 있습니다.

$('a[rel=tooltip]').tooltip();

내 마크 업은 다음과 같습니다.

<a rel="tooltip" title="Not implemented" class="btn"><i class="icon-file"></i></a>

이것은 잘 작동하지만 <a>동적으로 요소를 추가하면 해당 동적 요소에 툴팁이 표시되지 않습니다. 문서가 일반적인 jquery $(document).ready(function()기능으로 로드가 완료되면 .tooltip ()을 한 번만 바인딩하기 때문 입니다.

이것을 동적으로 생성 된 요소에 어떻게 바인딩 할 수 있습니까? 일반적으로 jquery live () 메소드를 통해이 작업을 수행합니다. 그러나 바인딩에 사용하는 이벤트는 무엇입니까? jquery .live ()로 부트 스트랩 .tooltip ()을 연결하는 방법을 잘 모르겠습니다.

이 작업을 수행하는 한 가지 방법은 다음과 같습니다.

/* Add new 'rows' when plus sign is clicked */
$("a.add").live('click', function () {
    var clicked_li = $(this).parent('li');
    var clone = clicked_li.clone();

    clone.find(':input').each(function() {
        $(this).val('');
    });

    clicked_li.after(clone);
    $('a[rel=tooltip]').tooltip();
});

이것은 작동하지만 일종의 해킹처럼 보입니다. 또한 $ (ready) 호출에서 정확히 동일한 .tooltip () 줄을 호출합니다. 그렇다면 페이지가 처음로드되고 해당 선택기와 일치 할 때 존재하는 요소가 툴팁으로 두 번 끝나는가?

이 접근법에는 아무런 문제가 없습니다. 나는 행동에 대한 모범 사례 또는 이해를 찾고 있습니다.


흠 좋은 질문이 도움이 될까요? github.com/twitter/bootstrap/issues/2374
Tim

흥미로운 내용이지만 한 가지 유형의 툴팁 만 원합니다. 툴팁 선택기와 일치하는 동적으로 추가 된 요소가 추가되도록하고 싶습니다.
durden2.0

3
좋은 질문입니다. 트위터 부분에 사이트가있는 것 같습니다.
누가 모호한 누가

1
@ durden2.0 그리스도인들은 어떻게 당신을 위해 일에 응답 했습니까? 올바른 것으로 받아들입니까?
Ruslans Uralovs

3
귀하의 질문과 관련이 없지만 ... rel속성 을 가로채는 것이 나쁜 스타일 입니다. 이것은 의미가 없으며 10 년 전에 해킹으로 시작되었습니다. 요즘 몇 년 동안 돌아가는 모든 단일 브라우저는 data-*속성을 지원하므로 더 이상 사용할 이유가 없습니다.
T Nguyen

답변:


513

이거 한번 해봐:

$('body').tooltip({
    selector: '[rel=tooltip]'
});

4
큰. 기본적으로 라이브 / 온을 대신하기 때문에 정답입니다.
Mahn


5
이 솔루션에서 마음에 들지 않는 점은 툴팁을 여러 번 구성 할 수 없다는 것입니다. 예를 들어 상단에 툴팁이 있고 하단에 툴팁이 있으면 작동하지 않습니다.
barbolo

7
@barbolo, 단순히 다른 구성에 다른 선택기를 사용하십시오. 이것이 올바른 솔루션입니다. Btw, Popover 와도 작동합니다.
Enrico Carlesso

16
부트 스트랩 3 사용 $ ( 'body'). tooltip ({selector : '[data-toggle = tooltip]'});
MERT DOĞAN

148

초기화하려는 툴팁 구성이 여러 개인 경우이 방법이 효과적입니다.

$("body").tooltip({
    selector: '[data-toggle="tooltip"]'
});

그런 다음 속성을 사용하여 개별 요소의 속성을 설정할 수 있습니다 data.


3
좋은 팁. $ ( "body"). tooltip ({selector : '[data-toggle = "tooltip"]'});로 변경해야했습니다.
Jafin

2
이것이 Bootstrap 3과 함께하는 방법입니다.
grim

큰! 테이블 내부에서 사용하려면 컨테이너를 추가하십시오 : 추가 너비를 피하기 위해 'body'.
shock_gone_wild

이것은 정말 잘 작동합니다. 나는 동적 테이블에서 많은 것들을 시도했지만 이것까지는 실제로 효과가 없었습니다.
AnBisw

Bootstrap 4에서도 작동합니다!
유진 쿨라 부 호프

17

나를 위해, mouseenter 이벤트를 잡는 것은 약간 버그가 있었고 툴팁이 제대로 표시되지 않거나 숨겨져 있지 않았습니다. 나는 이것을 써야했고, 이제 완벽하게 작동하고 있습니다.

$(document).on('mouseenter','[rel=tooltip]', function(){
    $(this).tooltip('show');
});

$(document).on('mouseleave','[rel=tooltip]', function(){
    $(this).tooltip('hide');
});

3
이것은 .on ( 'hover')이 제대로 작동하지 않는 이유에 대해 매우 도움이되었습니다.
Adam

이것이 handlebars.js 사용 구현에 사용하는 데 필요한 전부였습니다. handlebars.js를 사용하지 않았다면 허용 된 답변도 효과가있었습니다.
HPWD September

이것은 내가 이것을 사용하는 방법이지만 호버 지연과 같은 많은 옵션을 잃어 버렸고 수동으로 구현해야한다고 생각합니다.
DavidScherer 19

16

더 긴 답변을 여기에 게시했습니다 : https : //.com/a/20877657/207661

TL; DR : 문서 준비 이벤트에서 실행되는 한 줄의 코드 만 필요합니다.

$(document.body).tooltip({ selector: "[title]" });

다른 답변에서 제안 된 다른 더 복잡한 코드는 필요하지 않은 것 같습니다 (Bootstrap 3.0으로 테스트했습니다).


1
이것이 가장 좋은 대답입니다.
Chris Marisic

이것은 내 경우에 효과가있었습니다. Tablesorter 2.26.2와 함께 테이블을 사용했으며 Ajax 호출을 통해 값을 채웠습니다. 문제는 HTML 툴팁이 렌더링 된 출력 대신 HTML 텍스트로 표시되었다는 것입니다. 이것은 첫 번째로 나를 위해 일한 유일한 솔루션입니다. +1 그리고 많은 감사합니다!
Anurag

8

나 에게이 js는 Paola 와 동일한 문제를 재현합니다.

내 해결책 :

$(document.body).tooltip({selector: '[title]'})
.on('click mouseenter mouseleave','[title]', function(ev) {
    $(this).tooltip('mouseenter' === ev.type? 'show': 'hide');
});

2

전신에서 검색하는 대신. 그런 시나리오에서 이미 사용 가능한 동적 제목 옵션을 사용할 수 있습니다.

$btn.tooltip({
  title: function(){
    return $(this).attr('title');
  }
});

1

이 답변을 조합하여 최상의 결과를 얻었습니다. 툴팁을 계속 배치하고 관련 컨테이너에 연결할 수 있습니다.

$('body').on('mouseenter', '[rel=tooltip]', function(){
  var el = $(this);
  if (el.data('tooltip') === undefined) {
    el.tooltip({
      placement: el.data("placement") || "top",
      container: el.data("container") || false
    });
  }
  el.tooltip('show');
});

$('body').on('mouseleave', '[rel=tooltip]', function(){
  $(this).tooltip('hide');
});

관련 HTML :

<button rel="tooltip" class="btn" data-placement="bottom" data-container=".some-parent" title="Show Tooltip">
    <i class="icon-some-icon"></i>
</button>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.