Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

prevent bootstrap tooltip from hiding on click over it

I want to prevent the tooltip from hiding when i click over it. except that wherever i click on body it should hide it.

Tooltip should work even on tabbing.

js fiddle:

http://jsfiddle.net/C5GBU/41/

html:

<div class="bs-example tooltip-demo">
    <div class="bs-example-tooltips">
        <input type="text" class="form-control" data-container="body" data-toggle="popover" data-placement="top" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." data-original-title="" title=""/>    
        <input type="text" class="form-control" data-container="body" data-toggle="popover" data-placement="bottom" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." data-original-title="" title=""/>     
        <input type="text" class="form-control" data-container="body" data-toggle="popover" data-placement="right" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." data-original-title="" title=""/>
    </div>
</div>

jquery:

$('[data-toggle="popover"]').popover({trigger:"focus"});

$('body').on('click', function (e) {
    $('[data-toggle="popover"]').each(function () {
        //the 'is' for buttons that trigger popups
        //the 'has' for icons within a button that triggers a popup
        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
            $(this).popover('hide');
        }
    });                
});
like image 828
Susheel Singh Avatar asked Jan 17 '26 14:01

Susheel Singh


2 Answers

May I suggest triggering the popover manually

var close = true;
$('[data-toggle="popover"]').popover({trigger:"manual"});

$(document).on('mousedown', function (e) {
    if($(e.target).hasClass('popover-content'))
        close = false;
    else
        close = true; 
});

$('[data-toggle="popover"]').on("blur",function(){
    if(close)
        $(this).popover('hide');
    else 
       $(this).focus();
});

$('[data-toggle="popover"]').on("focus",function(){
   if(close)
       $(this).popover('show'); 
});

Example: Fiddle

Update fix for the tabbing issue:

Change the .blur function to the following:

$('[data-toggle="popover"]').on("blur",function(){
    if(close)
        $(this).popover('hide');
    else {
       $(this).focus();
       close = true;
    }
});

Fiddle

like image 93
Trevor Avatar answered Jan 20 '26 20:01

Trevor


A little late to the game, but I was able to solve this problem after trying other answers:

HTML:

<a data-toggle="popover" data-trigger="manual" tabindex="0" data-html="true" data-title="my title <button class='close'>×</button>" data-content="my content">
    <i class="fa fa-info-circle"></i>
</a>

CSS:

/* not necessary, but makes the x look better, imo */
.popover-title .close {
    margin-top: -3px;
    margin-right: -6px;
}

jQuery:

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

// Custom Bootstrap Popover triggers (requires triggers set to manual)
$("body").on("click", function (e) {

    // Trigger toggles associated popover
    if ($(e.target).hasClass("fa-info-circle")) {
        $(e.target).parent().popover("toggle");
    }

    // Popover x closes associated popover
    else if ($(e.target).hasClass("close")) {
        $(e.target).closest(".popover").siblings("[data-toggle='popover']").popover("hide");
    }

    // Everything else closes all popovers
    else if (!$(e.target).closest(".popover").length) {
        $(".popover").siblings("[data-toggle='popover']").popover("hide");
    }
});
  • Clicking an information icon toggles the associated popover.
  • Clicking a popover x closes the associated popover.
  • Clicking anywhere else closes all popovers.
  • Multiple popovers can be open at once.
  • HTML can be used inside popover body as well.
  • Popovers can be added/removed and handler will still work.
like image 43
Danny McKay Avatar answered Jan 20 '26 21:01

Danny McKay



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!