クリックでTwitter Bootstrap Tooltipコンテンツを変更する


224

クリックでAJAXリクエストを送信するアンカー要素のツールチップがあります。この要素には、ツールチップがあります(Twitter Bootstrapから)。AJAXリクエストが正常に戻ったときにツールチップのコンテンツを変更したいのですが。開始後にツールチップをどのように操作できますか?

回答:


411

今日、ソースコードを読んでいるときにこれを見つけました。したがって$.tooltip(string)Tooltipクラス内の任意の関数を呼び出します。そして、を見るとTooltip.fixTitledata-original-title属性をフェッチして、タイトル値をそれで置き換えます。

したがって、単に次のようにします。

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

そして、もちろん、タイトルを更新します。これは、ツールチップ内の値です。

別の方法(下記の@lukmdoコメントを参照):

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

5
ありがとう!これは1時間困惑していた。
小枝

160
またはさらに短い(スムーザー)$(element).attr('title', 'NEW_TITLE').tooltip('fixTitle').tooltip('show');
lukmdo 2012

5
data( 'tooltip')。optionsプロパティからタイトルを変更することもできます。stackoverflow.com/ questions / 10181847 /…を
James McMahon

4
'fixTitle'に関するドキュメントが見つからなかったので、これを使用することはお勧めしません!?...
user2846569

16
これは実際には機能しませんでした。ツールチップは値を切り替え、すぐに消えました。$(element).attr('data-original-title', newValue).tooltip('show');私にとって最もシンプルな作業ソリューションでした。
Gabe O'Leary 2016年

98

Bootstrap 3ではelt.attr('data-original-title', "Foo")"data-original-title"属性の変更が既にツールチップ表示の変更をトリガーしているので、これで十分です。

更新:変更をすぐに表示する.tooltip( 'show')を追加できます。タイトルの変更を確認するためにマウスアウトおよびマウスオーバーターゲットを行う必要はありません。

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

5
明確

3
変更はすぐには適用されません。新しいタイトルテキストを表示するには、
マウスアウト

9
これは実際には最良の答えであり.tooltip('show');、更新後に表示するために追加できます
Jared

これは、(多くの試みのうち)うまくいくように見えた唯一のソリューションです(bs3)。確かに素晴らしい解決策です!
ジョセフ2016年

3
このソリューションは他のソリューションより優れています
Ayyaz Zafar

14

実際にshow / hideを呼び出さなくてもツールチップテキストを更新できます。

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

3
これ.tooltip('show')は、チェーンの最後で私のために働いた。
マルコウ2015年

1
ええ、setContentそしてshowトリックを行います!data-original-title使用する代わりに直接変更できますfixTitle
brauliobo

Bootstrap v2.3.1でテスト
Ricardo

13

ツールチップを閉じて再度開かずにテキストを変更したい場合は、ここに良い解決策があります。

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

この方法では、ツールチップを閉じずにテキストが置き換えられます(再配置は行われませんが、1つの単語の変更などを行っている場合は問題ありません)。また、ツールチップをオフにして+戻ると、引き続き更新されます。

**これはブートストラップ3です。2の場合、おそらくデータ/クラス名を変更する必要があります


5
言うこと$tipはの属性ではありません$(element)
オーガスティンリーディンガー2015年

それをしました:$(element).attr('title', newTitle).tooltip('fixTitle').parent().find('.tooltip .tooltip-inner').text(newTitle);
オーガスティンRiedinger '20年

テキストフィールドに入力するときに、隣接する要素のツールチップを更新しています。キーを押すと、このコードでツールチップが消えます。
震え2015

これをありがとう。このソリューションの唯一の問題は、テキストの変更後にツールチップの位置がめちゃくちゃになるように見えることです。
Wojciech Zylinski 2015

13

Bootstrap 4の場合:

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

3
ドキュメントに記載されていないAPIを使用します。注意してください。
クロエ

9

これは、ツールチップが(おそらくJavaScriptで)インスタンス化されている場合に機能します。

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

7
ブートストラップ3では、次のようになります$('#tooltip_id').data('bs.tooltip').options.title = 'New_value!';
ajbeaven 2013年

ちょっとリレーショナル、コメントの修正を反映するように答えを変更できますか?ありがとう。
thouliha 2015

7

ブートストラップ3.xの場合

これは最もきれいな解決策のようです:

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

Showは、タイトルをすぐに更新し、ツールチップが非表示にされて再度表示されるのを待たないようにするために使用されます。


7

これがBootstrap 4のアップデートです。

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

しかし、最善の方法は次のようにすることです:

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

またはインライン:

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

UX側から見ると、フェードや非表示/表示効果なしでテキストが変更され、の必要がないことがわかります_fixTitle



6

ブートストラップ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

以下は私にとって最もうまくいきました、基本的に私は既存のツールチップを破棄し、新しいツールチップを表示する気になりません。他の回答のようにツールチップでshowを呼び出すと、カーソルがその上に移動していなくてもポップアップ表示されます。

このソリューションを採用した理由は、既存のツールチップを再利用する他のソリューションが原因で、要素の上にカーソルを置いたときにツールチップが表示されないという奇妙な問題が発生したためです。

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

1
this.Questionに対する最良の回答。
Daniel Mili Mski 2013年

@DanielMilińskiありがとう:)
aknuds1

1
boostrap3を使用している場合は、data('bs.tooltip')代わりに使用する必要がありますdata('tooltip')
Nigel Angel

3

ブートストラップ4では$(el).tooltip('dispose');、通常どおりに使用して再作成します。したがって、ツールチップを作成する関数の前にdisposeを配置して、2倍にならないようにすることができます。

状態をチェックし、値をいじくり回す必要があることは、あまりフレンドリーではないようです。


ツールチップのタイトルを更新する前または後に$(el).tooltip( 'dispose')を呼び出す必要がありますか?
Fifi 2018

@imabotは古いツールチップを破棄し、新しいデータで再作成します。ツールチップが複雑な場合は、初期構成を取得または保存して、その構成と新しい値で再作成できるようにします。それが理にかなっていると思います。
マーティン・ライン2018

2

関数を使用してツールチップの呼び出しにコンテンツを設定できます

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

呼び出された要素のタイトルのみを使用する必要はありません。


2

このコードは私にとって非常に役に立ちました。プロジェクトで効果的であることがわかりました。

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


1

既存のツールチップを破棄して、新しいツールチップコンテンツを再入力できるようにします

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

1

答えを出すことができませんでした。回避策は次のとおりです。

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

0

Mehmet Duranはほぼ正しいと思いますが、同じツールチップとその配置で複数のクラスを使用するときにいくつかの問題がありました。次のコードは、「tooltip_class」というクラスがあるかどうかのjsエラーチェックも回避します。お役に立てれば。

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

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

    }

0

要素内のテキストを直接変更して、テキストを変更します。(ツールチップの位置は更新されません)。

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

古いツールチップを破棄してテキストを変更し、新しいツールチップを作成して表示します。(古いものはフェードアウトし、新しいものはフェードインします)

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

topメソッドを使用して、両方の「節約」をアニメーション化しています。メッセージ(&nbspツールチップのサイズが変更されないようにするため)を使用して、テキストを「完了」に変更します。(およびパディング)リクエストが完了したとき。

$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

これは私のために働きました:(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>

属性data-html="true"は、ツールチップのタイトルにhtmlを使用することを許可します。


0

TooltipオブジェクトBoostrapを使用:

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

0

BS4(およびマイナーな変更を加えたBS3)の場合..何時間もの検索と試行の結果、この問題に対する最も信頼できる解決策が思い付き、同時に複数の(ツールチップまたはポップオーバー)を開くという問題も解決しました。フォーカスを失った後に自動的に開く問題など

$('[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

私はこれをブートストラップ4でのみテストし、.show()を呼び出さずに

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

-1

このコードを使用すると、ajaxリクエストが正常に返されたときに、ツールチップを非表示にしてタイトルを変更し、ツールチップを再度表示できます。

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

-1

私はこの簡単な方法を使用しています:

$(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');

attr 'data-original-title'で初期化された後にツールチップのテキストを変更する必要がある場合に役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.