我正在尝试关闭当popover
(不是popover本身)any body element
时打开is focused
{/ 1}},
所以我这样做:
$(document.body).on('focus focusout focusin', function(e) {
if( e.target.classList.contains('popover') ){return false;}
else{
$('*').popover('hide');
}
// code to close the popover
});
这在Chrome
上很有用,但在FF
FF
focusin and focusout
上,我需要{{1}}才能关闭游戏。
这是我的示例仅适用于chrome:http://jsfiddle.net/CU5U5/4/
我该如何解决这个问题?
答案 0 :(得分:25)
替代方案:
$(document).on('focus', ':not(.popover)', function(){
$('.popover').popover('hide');
});
编辑:
事实证明,我的上述答案是错误的。你需要在弹出窗口实例化的元素上调用.popover('hide')而不是.popover本身。并且您需要停止在链接上传播click事件(即,在单击处理程序中返回false),这样它就不会冒泡到文档根目录。请参阅此处获取答案http://jsfiddle.net/aFacG/1/。
HTML
<a data-content="a popover" id="mypopover" href="#">click me</a>
JS
$(document).ready(function(){
$("#mypopover").popover();
$(document).on('click', function(){
$("#mypopover").popover('hide');
});
$('#mypopover').click(function(){
return false;
});
});
答案 1 :(得分:8)
当前接受的答案存在的问题是,即使您在工具提示中单击,弹出也会隐藏(如果您想要在弹出窗口内部进行交互,则会出现错误...就像输入字段一样)。
在弹出框中使用stopPropagation方法,以防止隐藏事件冒泡DOM。
更新(引导网址已更改):http://jsfiddle.net/bNvX7/10/
$(document).ready(function(){
//Initialize popover on element
$("#mypopover").popover();
//Attach click handler to document
$(document).bind('click', function (e) {
$("#mypopover").popover('hide');
});
//Dont hide when I click anything inside #container
$('#container').bind('click', function(e) {
e.stopPropagation();
});
});
答案 2 :(得分:4)
非常简单:
$('.popover').remove();
答案 3 :(得分:0)
这是一个稍微更通用的方法,它只需要一个处理程序,适用于所有popover / link包含属性data-rel =&#34; popover&#34 ;,例如:
HTML
<a href="#" data-rel="popover">toggle</a>
JS
$(document).on('click', function(event) {
var $clicked = $(event.target);
if ($clicked.closest('[data-rel="popover"]').length) {
return;
} else if ($clicked.closest('.popover').length) {
event.stopPropagation();
} else {
$('[data-rel="popover"]').popover('hide');
}
});
答案 4 :(得分:0)
也许你可以试试这个:
// Part 1: initialize the popver
var button = template.find(".itemInfo button");
// add a class name to identify the target later.
button.addClass("popover-toggle");
var content = $("<div>test</div>");
button.popover({
container:"body",
content: content,
html:true,
placement:"top",
title:"Popover title",
trigger:'click'
});
// Part 2: add click event listener
$(document).on("click", function(event){
var target = $(event.target);
$.each( $(".popover-toggle"), function(index, value){
var _target = $(value);
// not click on the button and not click on the popover it self
if( !target.is( _target ) && target.closest(".popover").length == 0 ){
_target.popover("hide");
}
});
});
不是最佳做法,但在Chrome和FF上都能正常使用。
答案 5 :(得分:0)
致电
$('.popover').popover('hide');
将关闭所有当前打开的弹出窗口。