单击和鼠标离开后,Bootstrap的工具提示不会消失


115

我对bootstrap的工具提示有问题:单击按钮时,即使光标在按钮外部,工具提示也会保留。我查看了手册-Bootstrap的工具提示,如果单击按钮,也会遇到同样的问题。有解决此问题的解决方案吗?刚在最新的FF,IE中尝试过。


它在我的问题中也无法正常工作,让我们看看那里。有同样的问题。
SilentCry

Answers:


241

这是因为trigger未设置。触发器的默认值为'hover focus',因此在单击一个按钮后,工具提示将保持可见,直到单击另一个按钮为止,因为该按钮为focused

因此,您所要做的就是仅定义trigger'hover'。在单击按钮后,没有持久化工具提示的情况下链接到的同一示例下面:

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

小提琴中的doc示例-> http://jsfiddle.net/vdzvvg6o/


1
谢谢大卫,这确实有效。我最后误解了工具提示的触发选项,现在我是对的。
SilentCry

1
@SilentCry只要记住您要锁定的对象,触发“悬停”可能并不总是容易/常见的。
phk 2015年

3
@davidkonrad移动平台,盲人用户。也许还会解释为什么他们将“悬停焦点”设置为默认值。
phk 2015年

2
@phk,引导程序存在一个普遍的问题,因为它不是移动优先的,所以关于盲人我们应该使用aria属性。BTW是为加拿大当局开发的一种出色的可用性测试工具,可以满足几个“级别”-> achecker.ca/checker/index.php我的国家没有这些标准,但值得遵循无论如何。
davidkonrad,2015年

1
您可能想在下面查看Karmonik Cola的答案。它始终显示工具提示。
David Stosik '16

62

我知道已经一年多了,但是在这里我无法通过任何示例来解决这个问题。我不得不使用以下内容:

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

这也将在悬停时再次显示工具提示。


1
这需要被接受,也应该在引导代码库中实现。
kjdion84 '17

5
这对于放置在带有“ hover”触发器的按钮上的引导工具提示非常有帮助,这些触发器会导致异步回发(即显示模式面板)。否则,按钮按下的回发将导致工具提示“卡住”并且永不消失。
bradykey '17

1
就我而言,我在执行ajax操作时禁用了提交按钮。在ajax进程运行时,由于禁用了按钮,因此工具提示将保留。一旦ajax处理完成,该按钮将再次变为“可用”。将鼠标悬停在该按钮上然后再将其关闭将关闭工具提示。Nitai的解决方案可以解决所有问题。现在,该工具提示会在单击时隐藏,并且一旦按钮再次变为活动状态,仍可在悬停时使用。
HPWD

我同意@ kjdion84。我一直在努力直到发现这一点
艾哈迈德(Ahmad)

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'5

8

在我的情况下,该问题仅在Internet Explorer中重现:无论哪个元素(输入,div等...)都有工具提示-如果单击,则仍显示工具提示。

在网上找到了一些建议使用.hide()解决方案的解决方案,该解决方案是对元素Click事件的提示-但这不是一个好主意-将鼠标悬停在同一元素上-将其隐藏起来...就我而言

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

成就了一切!!!!-其中.myToolTippedElement是具有课程提示的元素...


对我也适用,并且比公认的解决方案具有优势,可以始终显示工具提示。
David Stosik

3

在带有引导程序4和jquery的angular 7中,我发现了这一点,并且工作正常。我使用了dispose,因为它破坏不会隐藏工具提示。

  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代码 //工具提示$('。btn')。tooltip({触发器:'悬停'});

这肯定会消除卡住的工具提示。


2

大卫在上面的回答有助于解决我的问题。我在按钮上同时悬停和单击事件。MAC上的Firefox确实表现出了我想要的效果。也就是说,悬停时显示工具提示,不显示单击的工具提示。在其他浏览器和操作系统上,当我单击时,工具提示将显示并保持显示状态。即使我将鼠标移至其他按钮进行悬停。这就是我所拥有的:

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

解决方法是:

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


2

工作方案

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

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

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

尽管此代码可以回答问题,但提供有关此代码为什么和/或如何回答问题的其他上下文,可以改善其长期价值。
亚当

@Adam在单击任何<a>,<button>或其他具有按钮功能或外观的元素后,我无法在论坛上找到任何有效的解决方案来隐藏工具提示。
Alpha

1

解决此问题的方法是,使用以下代码删除click事件函数中的工具提示:

$("#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() {
   $('#save').tooltip({
            trigger : 'hover'
        }) ;

});

我当时动态禁用了保存按钮,然后问题出了。


这里保存的是我的按钮的ID
Devendra Singraul


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

就我而言,这是解决方法:

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

我没有遵循Bootstrap文档中的以下规则:

在从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");
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.