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');
}
});
});
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
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");
}
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With