ブートストラップのツールチップは、ボタンをクリックしてマウスを離しても消えない


115

ブートストラップのツールチップに問題があります。ボタンをクリックすると、カーソルがボタンの外にあってもツールチップが残ります。マニュアルを確認しました-Bootstrapのツールチップ。ボタンをクリックしても同じ問題が発生します。これを修正する解決策はありますか?最新のFF、IEで試してみました。


私の質問でもリンクで機能していません。そこで見てみましょう。同じ問題があります。
SilentCry 2015年

回答:


241

これはtriggerが設定されていないためです。トリガーのデフォルト値はです'hover focus'。したがって、ボタンがであるため、ボタンがクリックされた後、別のボタンがクリックされるまで、ツールチップは表示されたままですfocused

だからあなたがしなければならないすべてはtrigger'hover'唯一として定義することです。ボタンがクリックされた後、ツールチップを永続化せずにリンクした同じ例の下:

$('[data-toggle="tooltip"]').tooltip({
    trigger : 'hover'
})  

フィドルのドキュメントの例-> http://jsfiddle.net/vdzvvg6o/


1
デビッド、ありがとうございます。最後に、ツールチップのトリガーオプションを誤解しましたが、今は正しいです。
SilentCry 2015年

1
@SilentCry対象としている人物を覚えておいてください。「ホバー」をトリガーすることは必ずしも簡単で一般的ではない場合があります。
2015年

3
@davidkonradモバイルプラットフォーム、視覚障害者。また、「ホバーフォーカス」をデフォルトに設定する理由も説明しているかもしれません。
2015年

2
@phk、ブートストラップには、モバイル優先ではないという一般的な問題があります。盲目の人々に関しては、aria-attributesを使用する必要があります。そこには果たすことができ、いくつかの「レベル」とカナダの当局のために開発された使いやすさのためにテストするための素晴らしいツールは、BTWある- > achecker.ca/checker/index.php私の国は、これらの基準を持っていないが、それは彼らに追いついての価値がありますとにかく。
davidkonrad 2015年

1
以下のKarmonik Colaの回答をご覧ください。フォーカスされているツールチップを表示し続けます。
David Stosik

62

私は1年以上前から知っていますが、ここでの例でこれを機能させることはできませんでした。私は以下を使用しなければなりませんでした:

$('[rel="tooltip"]').on('click', function () {
    $(this).tooltip('hide')
})

これはまた、ホバー時にツールチップを表示します。


1
これは受け入れられる答えである必要があり、ブートストラップコードベースに実装する必要もあります。
kjdion84 2017年

5
これは、非同期ポストバック(つまり、モーダルパネルの表示)を引き起こす「ホバー」のトリガーを使用してボタンに配置されたブートストラップツールチップに非常に役立ちました。これがないと、ボタンを押すことによるポストバックにより、ツールチップが「スタック」し、消えることはありません。
bradykey

1
私の場合、ajaxアクションが実行されている間は送信ボタンを無効にしていました。ajaxプロセスが実行されている間、ボタンが無効にされたため、ツールチップは残ります。ajaxプロセスが完了すると、ボタンは再び「使用可能」になります。ボタンをオンまたはオフにすると、ツールチップが閉じます。Nitaiのソリューションはすべてを修正しました。ツールチップはクリックすると非表示になり、ボタンが再びアクティブになるとホバー時にも機能します。
HPWD

@ kjdion84に同意します。私はこれを見つけるまで苦労していました
アフマド

9

こんにちは、この問題の解決策はほとんどありません。他の解決策がうまくいかないときは、これを試してください:

$('body').tooltip({
        selector: '[data-toggle="tooltip"], [title]:not([data-toggle="popover"])',
        trigger: 'hover',
        container: 'body'
    }).on('click mousedown mouseup', '[data-toggle="tooltip"], [title]:not([data-toggle="popover"])', function () {
        $('[data-toggle="tooltip"], [title]:not([data-toggle="popover"])').tooltip('destroy');
    });

これはドラッグアンドドロップのソリューションでもあります。だから私はこれが誰かを助けることを願っています:)


Telerik Kendoのグリッドボタンでのみ問題が発生していました。いずれかをクリックしても、ツールチップは非表示になりませんでした。これで解決しました!
John81、2018年

8

私の場合、問題はInternet Explorerでのみ再現されました。どの要素(input、divなど...)にツールチップがある場合でも、クリックした場合、ツールチップは表示されたままです。

要素のClickイベントのツールチップである.hide()を推奨するいくつかの解決策をWebで見つけましたが、それは悪い考えです-同じ要素に戻ってホバリング-それを非表示にします...私の場合

$('.myToolTippedElement').on('click', function () {
    $(this).blur()
})

すべての魔法を作りました!!!-.myToolTippedElementはCourseのツールチップを持つ要素です...


私にとっても機能し、ツールチップをフォーカスに表示し続けるという一般的なソリューションよりも優れています。
David Stosik

3

ブートストラップ4とjqueryを使用したAngular 7では、これを見つけて問題なく動作しました。破棄してもツールチップが非表示にならないため、破棄を使用しました。

  ngAfterViewChecked() {
    $('[data-toggle="tooltip"]').tooltip({
      trigger: 'hover'
    });
    $('[data-toggle="tooltip"]').on('mouseleave', function () {
      $(this).tooltip('dispose');
    });
    $('[data-toggle="tooltip"]').on('click', function () {
      $(this).tooltip('dispose');
    });
   }

2

私の場合はうまくいったrel="tooltip"代わりに使ってみてくださいdata-toggle="tooltip"。私は使用 data-toggle="tooltip"していて、トリガー条件をホバーとして設定しましたが、私の場合は機能しませんでした。データセレクターを変更したところ、うまくいきました。

HTMLコード:

<button id="submit-btn" type="submit" class="btn btn-success" rel="tooltip" title="Click to submit this form">Submit</button>

JSコード // Tooltip $( '。btn')。tooltip({trigger: 'hover'});

これにより、スタックしたツールチップが確実に削除されます。


2

上記のデイビッドの答えは私の問題を解決するのに役立ちました。ボタンにホバーイベントとクリックイベントの両方がありました。MAC上のFirefoxは期待どおりに動作しました。つまり、ホバー時にツールチップを表示し、クリック時にツールチップを表示しません。他のブラウザやOSでは、クリックするとツールチップが表示され、そのまま表示されます。ホバーのためにマウスを他のボタンに移動しても。これは私が持っていたものです:

$('[data-toggle="tooltip"]').tooltip({placement: 'right', html: true}); 

これは修正です:

$('[data-toggle="tooltip"]').tooltip({placement: 'right', html: true, trigger: 'hover'}); 

2

また、以下を追加できます。

onclick="this.blur()"

1
これは、Kamornik Colaが提案したものとどのように違いますか(jQueryなしの実装を除く)?答えが役立つように、いくつかの説明を追加することをお勧めします。
宜しくお願いし

2

ワーキングソリューション

$(document).on("click",function()
    {
    setTimeout(function()
    {

  $('[data-toggle="tooltip"]').tooltip('hide');

},500);    // Hides tooltip in 500 milliseconds
    });

このコードは質問に答えることがありますが、このコードが質問に答える理由や方法に関する追加のコンテキストを提供すると、長期的な価値が向上します。
アダム

@Adamボタンの機能や外観が関連付けられている<a>、<button>またはその他の要素をクリックした後、ツールチップを非表示にするための解決策をフォーラムで見つけることができませんでした。
アルファ

1

この問題を修正する方法は、次のコードを使用して、クリックイベント関数のツールチップを削除することでした。

$("#myButton").on("click", function() {
    $("div[role=tooltip]").remove();
});

1
ホバー時に再びツールチップを取得できますか?
Vishnu

0

私はcycle.jsでブートストラップのツールチップを使用していますが、上記のどれもうまくいきませんでした。

私はこれをしなければなりませんでした:

return button( selector + '.btn.btn-sm', 
             {
               hook: {
                 destroy: tooltipOff,
                 insert:  toggleTooltipOn,
               },
....

function toggleTooltipOn(vnode){
  setupJQuery();  
  jQuery[0].$( vnode.elm )
    .tooltip({container:'body', trigger: 'hover');
//container:body is to help tooltips not wiggle on hover
//trigger:hover is to only trigger on hover, not on click
}

function tooltipOff( vnode ){
  setupJQuery();      
  jQuery[0].$( vnode.elm ).tooltip('hide');
}


0

あなたのドキュメント準備機能の中でこれを使用

 $(document).ready(function(){
            $('[data-toggle="tooltip"]').tooltip({
               trigger : 'hover'
            });
    });

0

この解決策は私にとってうまくいきました。

$('a[data-toggle="tooltip"]').tooltip({
  animated: 'fade',
  placement: 'bottom',
  trigger: 'click'
});

$('a[data-toggle="tooltip"]').click(function(event){
  event.stopPropagation();
});

$('body').click(function(){
  $('a[data-toggle="tooltip"]').tooltip('hide');
});

バイオリン

私は以前の回答で与えられた解決策のほとんどを試しましたが、どれも私のためにうまくいきませんでした。


0

私の問題はDataTableにあります。以下のコードは私のために働きます。

columnDefs: [ { targets: 0, data: "id", render: function (data, type, full, meta) { return '<a href="javascript:;" class="btn btn-xs btn-default" data-toggle="tooltip" title="Pending" data-container="body"><i class="fa fa-check"></i></a>'; } } ], drawCallback: function() { $('[data-toggle="tooltip"]').tooltip(); $('[data-toggle="tooltip"]').on('click', function () { $(this).tooltip('hide'); }); }


0

以下の方法を使用して、mouseleaveのツールチップを非表示にすることもできます。

jQuery("body").on("mouseleave", ".has-tooltip", function(){
    jQuery(this).blur();
});

0

私の場合、これは修正でした:

beforeDestroyingElement() {    
  $('[data-toggle="tooltip"]').tooltip('hide');
}

私はBootstrap docsからこのルールに従っていませんでした:

ツールチップは、対応する要素がDOMから削除される前に非表示にする必要があります。


0

これは、以下を追加することでHTMLでも実現できます。

 data-trigger="hover"

 <button type="button" data-toggle="tooltip" data-placement="top" data-trigger="hover" title="To re-enable scanning, click here">Text</button>

悲しいことに、これは機能せず、ツールチップはまだスタックしています。
Fwd079

0

また、古いバージョンでもこの方法を使用できます。これは、受け入れられた回答がうまくいかなかったため、このコードを自分とその仕事のために書いたためです。

$(document).on('mousedown', "[aria-describedby]", function() {
    $("[aria-describedby]").tooltip('hide');
});

0

誰かがクリック後にしばらく表示されるツールチップを設定したい場合は、ここに私がやった方法があります:

$('[data-toggle="tooltip"]').tooltip({
trigger : 'click'})  

$('[data-toggle="tooltip"]').on('shown.bs.tooltip', function () {
$(this).tooltip('hide')
})

0

強制blur()を使用すると、ユーザーエクスペリエンスを低下させることができます。私はそれをしません。「data-original-title」と「data-toggle」と「title」の属性を削除すると効果があることがわかりました。

    $(id).tooltip('hide');
    $(id).removeAttr("data-toggle");
    $(id).removeAttr("data-original-title");
    $(id).removeAttr("title");
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.