Thay đổi nội dung Twitter Bootstrap Tooltip khi nhấp


224

Tôi có một chú giải công cụ về phần tử neo, sẽ gửi yêu cầu AJAX khi nhấp. Phần tử này có một tooltip (từ Twitter Bootstrap). Tôi muốn nội dung chú giải công cụ thay đổi khi yêu cầu AJAX trả về thành công. Làm thế nào tôi có thể thao tác với tooltip sau khi bắt đầu?

Câu trả lời:


411

Chỉ cần tìm thấy điều này ngày hôm nay trong khi đọc mã nguồn. Vì vậy, $.tooltip(string)gọi bất kỳ chức năng trong Tooltiplớp. Và nếu bạn nhìn vào Tooltip.fixTitle, nó sẽ tìm nạp data-original-titlethuộc tính và thay thế giá trị tiêu đề bằng nó.

Vì vậy, chúng tôi chỉ đơn giản là làm:

$(element).tooltip('hide')
          .attr('data-original-title', newValue)
          .tooltip('fixTitle')
          .tooltip('show');

và chắc chắn, nó cập nhật tiêu đề, đó là giá trị bên trong tooltip.

Một cách khác (xem bình luận @lukmdo bên dưới):

$(element).attr('title', 'NEW_TITLE')
          .tooltip('fixTitle')
          .tooltip('show');

5
Cảm ơn! Điều này đã được gây trở ngại trong một giờ.
twig

160
Hoặc thậm chí ngắn hơn (mượt mà hơn)$(element).attr('title', 'NEW_TITLE').tooltip('fixTitle').tooltip('show');
lukmdo

5
Bạn cũng có thể thay đổi tiêu đề thông qua dữ liệu ('tooltip'). Thuộc tính tùy chọn, xem stackoverflow.com/questions/10181847/ chủ
James McMahon

4
Không thể tìm thấy tài liệu về 'fixTitle', vì vậy tôi đoán không nên sử dụng tài liệu này!? ...
dùng2846569

16
Điều này thực sự không hiệu quả với tôi, tooltip chuyển các giá trị và sau đó biến mất nhanh chóng. $(element).attr('data-original-title', newValue).tooltip('show');là giải pháp làm việc đơn giản nhất đối với tôi.
Gabe O'Leary

98

Trong Bootstrap 3, đủ để gọi elt.attr('data-original-title', "Foo")là các thay đổi trong "data-original-title"thuộc tính đã kích hoạt các thay đổi trong màn hình chú giải công cụ.

CẬP NHẬT: Bạn có thể thêm .tooltip ('hiển thị') để hiển thị các thay đổi ngay lập tức, bạn không cần phải di chuột và nhắm mục tiêu di chuột để xem thay đổi trong tiêu đề

elt.attr('data-original-title', "Foo").tooltip('show');

5
Câu trả lời rõ ràng, tại sao không có up: <
ays0110

3
Nó không áp dụng thay đổi ngay lập tức, bạn cần di chuột và nhắm mục tiêu di chuột để xem văn bản tiêu đề mới
Lev Lukomsky

9
Đây thực sự là câu trả lời tốt nhất và bạn có thể thêm .tooltip('show');để hiển thị sau khi cập nhật
Jared

Đây là giải pháp duy nhất (trong số nhiều thử nghiệm) dường như chỉ hoạt động (bs3). Giải pháp tốt đẹp cho chắc chắn!
jyoseph

3
Giải pháp này tốt hơn tất cả các giải pháp khác
Ayyaz Zafar

14

bạn có thể cập nhật văn bản chú giải công cụ mà không thực sự gọi show / ẩn:

$(myEl)
    .attr('title', newTitle)
    .tooltip('fixTitle')
    .tooltip('setContent')

3
Điều này, với .tooltip('show')sự kết thúc của chuỗi, làm việc cho tôi.
markau

1
yeah, setContentshowlừa bạn có thể thay đổi data-original-titletrực tiếp thay vì sử dụngfixTitle
brauliobo

Đã thử nghiệm trên Bootstrap v2.3.1
Ricardo

13

Đây là một giải pháp tốt nếu bạn muốn thay đổi văn bản mà không đóng và mở lại tooltip.

$(element).attr('title', newTitle)
          .tooltip('fixTitle')
          .data('bs.tooltip')
          .$tip.find('.tooltip-inner')
          .text(newTitle)

bằng cách này, văn bản được thay thế mà không đóng tooltip (không định vị lại, nhưng nếu bạn đang thực hiện thay đổi một từ, v.v. thì sẽ ổn thôi). và khi bạn di chuột xuống + trở lại trên tooltip, nó vẫn được cập nhật.

** đây là bootstrap 3, vì 2 bạn có thể phải thay đổi tên dữ liệu / lớp


5
Nói $tipkhông phải là một thuộc tính của$(element)
Augustin Riedinger

Đã làm điều đó:$(element).attr('title', newTitle).tooltip('fixTitle').parent().find('.tooltip .tooltip-inner').text(newTitle);
Augustin Riedinger

Tôi đang cập nhật một chú giải công cụ trên một phần tử lân cận khi nhập vào trường văn bản và chú giải công cụ sẽ biến mất với tôi với mã này khi tôi nhấn một phím.
run rẩy

Cảm ơn vì điều đó. Vấn đề duy nhất với giải pháp này là nó dường như làm rối loạn vị trí tooltip sau khi thay đổi văn bản.
Wojciech Zylinski

13

cho Bootstrap 4:

$(element).attr("title", "Copied!").tooltip("_fixTitle").tooltip("show").attr("title", "Copy to clipboard").tooltip("_fixTitle");

3
Điều này sử dụng API không có giấy tờ. Coi chừng.
Chloe

9

Điều này hoạt động nếu tooltip đã được khởi tạo (có thể bằng javascript):

$("#tooltip_id").data('tooltip').options.title="New_value!";
$("#tooltip_id").tooltip('hide').tooltip('show');

7
Với bootstrap 3, nó trở thành$('#tooltip_id').data('bs.tooltip').options.title = 'New_value!';
ajbeaven

Này quan hệ, bạn có thể thay đổi câu trả lời của bạn để phản ánh các sửa chữa ý kiến? Cảm ơn.
thouliha

7

Dành cho bootstrap 3.x

Đây có vẻ là giải pháp sạch nhất:

$(element)
  .attr('data-original-title', 'New title').tooltip('show')

Hiển thị được sử dụng để thực hiện cập nhật tiêu đề ngay lập tức và không chờ cho tooltip bị ẩn và hiển thị lại.


7

Đây là bản cập nhật cho Bootstrap 4 :

var title = "Foo";
elt.attr('data-original-title', title);
elt.tooltip('update');
elt.tooltip('show');

Nhưng cách tốt nhất là làm như thế này:

var title = "Foo";
elt.attr('title', title);
elt.attr('data-original-title', title);
elt.tooltip('update');
elt.tooltip('show');

hoặc nội tuyến:

var title = "Foo";
elt.attr('title', title).attr('data-original-title', title).tooltip('update').tooltip('show');

Từ phía UX bạn chỉ thấy văn bản được thay đổi mà không có hiệu ứng mờ dần hoặc ẩn / hiển thị và không có nhu cầu cho _fixTitle.


6

Bạn chỉ có thể thay đổi data-original-titlebằng cách sử dụng mã sau đây:

$(element).attr('data-original-title', newValue);

6

Bootstrap 4

$('#topic_1').tooltip('dispose').tooltip({title: 'Goodbye'}).tooltip('show')

https://getbootstrap.com/docs/4.1/components/tooltips/#tooltipdispose

$('#topic_1').tooltip({title: 'Hello'}).tooltip('show');
setTimeout( function() {
  $('#topic_1').tooltip('dispose').tooltip({title: 'Goodbye'}).tooltip('show');
}, 5000);
#topic_1 {
  border: 1px solid red;
  margin: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css" integrity="sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B" crossorigin="anonymous">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js" integrity="sha384-o+RDsa0aLu++PJvFqy8fFScvbHFLtbvScb8AjopnFD+iEQ7wo/CG0xlczd+2O/em" crossorigin="anonymous"></script>

<div id="topic_1">Topic 1</div>


4

Phần sau đây hoạt động tốt nhất với tôi, về cơ bản tôi đang loại bỏ bất kỳ chú giải công cụ hiện có nào và không bận tâm đến việc hiển thị chú giải công cụ mới. Nếu cuộc gọi hiển thị trên chú giải công cụ như trong các câu trả lời khác, nó sẽ bật lên ngay cả khi con trỏ không lơ lửng phía trên nó.

Lý do tôi tìm giải pháp này là các giải pháp khác, sử dụng lại tooltip hiện có, dẫn đến một số vấn đề lạ với tooltip đôi khi không hiển thị khi di con trỏ lên trên phần tử.

function updateTooltip(element, tooltip) {
    if (element.data('tooltip') != null) {
        element.tooltip('hide');
        element.removeData('tooltip');
    }
    element.tooltip({
        title: tooltip
    });
}

1
Câu trả lời hay nhất cho câu hỏi này.
Daniel Miliński

@ DanielMiliński Cảm ơn :)
aknuds1

1
Nếu bạn đang sử dụng boostrap3, bạn cần sử dụng data('bs.tooltip')thay vìdata('tooltip')
Nigel Angel

3

Trong bootstrap 4 tôi chỉ sử dụng $(el).tooltip('dispose');sau đó tạo lại như bình thường. Vì vậy, bạn có thể đặt xử lý trước một hàm tạo ra một chú giải công cụ để đảm bảo rằng nó không tăng gấp đôi.

Phải kiểm tra trạng thái và tinker với các giá trị có vẻ ít thân thiện hơn.


Chúng ta nên gọi $ (el) .tooltip ('dispose') trước hoặc sau khi cập nhật tiêu đề tooltip?
Fifi

@imabot loại bỏ tooltip cũ, sau đó tạo lại với dữ liệu mới. Nếu chú giải công cụ của bạn phức tạp, bạn có thể muốn truy xuất hoặc lưu trữ cấu hình ban đầu để bạn có thể chỉ cần tạo lại với cấu hình đó + các giá trị mới. Hy vọng rằng có ý nghĩa.
Martin Lyne

2

Bạn có thể đặt nội dung trong cuộc gọi tooltip với một chức năng

        $("#myelement").tooltip({
            "title": function() {
                return "<h2>"+$("#tooltipcontainer").html()+"</h2>";
            }
        });

Bạn không phải chỉ sử dụng tiêu đề của phần tử được gọi.


2

Cảm ơn mã này rất hữu ích cho tôi, tôi thấy nó hiệu quả trong các dự án của tôi

$(element).attr('title', 'message').tooltip('fixTitle').tooltip('show');


1

Phá hủy bất kỳ chú giải công cụ có sẵn nào để chúng tôi có thể hồi sinh với nội dung chú giải công cụ mới

$(element).tooltip("destroy");    
$(element).tooltip({
    title: message
});

1

Tôi không thể có bất kỳ câu trả lời nào hoạt động, đây là một cách giải quyết:

$('#'+$(element).attr('aria-describedby')+' .tooltip-inner').html(newTitle);

0

Tôi nghĩ Mehmet Duran gần như đúng, nhưng có một số vấn đề khi sử dụng nhiều lớp với cùng một tooltip và vị trí của chúng. Đoạn mã sau cũng tránh lỗi kiểm tra js nếu có bất kỳ lớp nào được gọi là "tooltip_group". Hi vọng điêu nay co ich.

if (jQuery(".tooltip_class")[0]){    

        jQuery('.tooltip_class')
            .attr('title', 'New Title.')
            .attr('data-placement', 'right')
            .tooltip('fixTitle')
            .tooltip('hide');

    }

0

Thay đổi văn bản bằng cách thay đổi văn bản trong phần tử trực tiếp. (không cập nhật vị trí chú giải công cụ).

$('.tooltip-inner', $element.next()).html(newHtml);
$('.tooltip-inner', $element.next()).text(newText);

Thay đổi văn bản bằng cách hủy công cụ cũ, sau đó tạo và hiển thị một công cụ mới. (Làm cho cái cũ mờ dần và cái mới mờ dần)

$element
.tooltip('destroy')
.tooltip({
    // Repeat previous options.
    title: newText,
})
.tooltip('show');

Tôi đang sử dụng phương pháp hàng đầu để tạo hiệu ứng "Tiết kiệm". thông báo (sử dụng &nbspđể tooltip không thay đổi kích thước) và để thay đổi văn bản thành "Xong". (cộng với phần đệm) khi yêu cầu hoàn thành.

$element.tooltip({
  placement: 'left',
  title: 'Saving...',
  trigger: 'manual',
}).tooltip('show');

var parent = $element.parent();
var interval_id = setInterval(function(){
    var text = $('.tooltip-inner', parent).html();
    switch(text) {
    case 'Saving.&nbsp;&nbsp;': text = 'Saving..&nbsp;'; break;
    case 'Saving..&nbsp;': text = 'Saving...'; break;
    case 'Saving...': text = 'Saving.&nbsp;&nbsp;'; break;
    }
    $('.tooltip-inner', parent).html(text);
}, 250);

send_request( function(){
    // When the request is complete
    clearInterval(interval_id);
    $('.tooltip-inner', parent).html('Done.&nbsp;&nbsp;&nbsp;&nbsp;');
    setTimeout(function() {
        $element.tooltip('hide');
    }, 1500 /* Show "Done." for a bit */);
});

0

Điều này làm việc cho tôi: (bootstrap 3.3.6; jquery = 1.11.3)

<a id="alertTooltip" href="#" data-html="true" class="tooltip" data-toggle="tooltip" title="Tooltip message"></a>

<script>
  $('#alertTooltip').attr('title', "Tooltip new <br /> message").tooltip('fixTitle');
</script>

Thuộc tính data-html="true"cho phép sử dụng html trên tiêu đề tooltip.


0

Với đối tượng Tooltip Boostrap:

$(element).attr('data-original-title', 'New value');
$(element).data('bs.tooltip').tip().find('.tooltip-inner').text('New value');

0

Đối với BS4 (và BS3 với những thay đổi nhỏ) .. sau nhiều giờ tìm kiếm và thử nghiệm, tôi đã đưa ra giải pháp đáng tin cậy nhất cho vấn đề này và nó thậm chí còn giải quyết vấn đề mở nhiều hơn một (tooltip hoặc popover) cùng một lúc, và vấn đề mở tự động sau khi mất tập trung, v.v.

$('[data-toggle="tooltip"]').tooltip({
  trigger: 'hover'
}).on('shown.bs.tooltip', function() {
  var link = $(this);
  var data = '';
  data += '<ul style="list-style-type:none;margin:0;padding:0;text-align:left;font-size:12px">';
  data += '	<li>Sherif Salah</li>';
  data += '	<li>Muhammad Salah</li>';
  data += '	<li>and a gazillion more...</li>';
  data += '</ul>';
  link.attr('data-original-title', data);
  setTimeout(function() {
    if (link.is(':hover')) {
      link.tooltip("dispose").tooltip("show");
    }
  }, 1000);
});
<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" />
</head>

<body>
  <div class="card">
    <div class="card-body text-center">
      <a href="JavaScript:void(0);" class="btn btn-sm btn-link" data-toggle="tooltip" data-placement="top" data-html="true" title="Loading...">gazillion</a>
    </div>
  </div>
  <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
</body>

</html>


0

Tôi chỉ thử nghiệm điều này trong bootstrap 4 & w / o gọi .show ()

el.tooltip('hide').attr('data-original-title', 'message');

-1

bạn có thể sử dụng mã này để ẩn mẹo công cụ thay đổi tiêu đề của nó và hiển thị lại chú giải công cụ, khi yêu cầu ajax trả về thành công.

$(element).tooltip('hide');
$(element).attr('title','this is new title');
$(element).tooltip('fixTitle');
setTimeout(function() {  $(element).tooltip('show');}, 500);

-1

Tôi đang sử dụng cách dễ dàng này:

$(document).ready(function() {
    $("#btn").prop('title', 'Click to copy your shorturl');
});

function myFunction(){
  $(btn).tooltip('hide');
  $(btn).attr('data-original-title', 'Test');
  $(btn).tooltip('show');
});


-1
$(this).attr('data-original-title', 'click here to publish')
       .tooltip('fixTitle')
       .tooltip('show');

Hữu ích nếu bạn cần thay đổi văn bản của chú giải công cụ sau khi nó được khởi tạo với attr 'data-original-title'.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.