假设在任何时候只有一个弹出窗口可见,您可以使用一组标志来标记何时有一个弹出窗口可见,然后才隐藏它们。
如果你在文档正文上设置了事件监听器,它会在你点击标有'popup-marker'的元素时触发。所以你必须调用stopPropagation()
事件对象。并在单击弹出窗口本身时应用相同的技巧。
下面是执行此操作的有效 JavaScript 代码。它使用 jQuery >= 1.7
jQuery(function() {
var isVisible = false;
var hideAllPopovers = function() {
$('.popup-marker').each(function() {
$(this).popover('hide');
});
};
$('.popup-marker').popover({
html: true,
trigger: 'manual'
}).on('click', function(e) {
// if any other popovers are visible, hide them
if(isVisible) {
hideAllPopovers();
}
$(this).popover('show');
// handle clicking on the popover itself
$('.popover').off('click').on('click', function(e) {
e.stopPropagation(); // prevent event for bubbling up => will not get caught with document.onclick
});
isVisible = true;
e.stopPropagation();
});
$(document).on('click', function(e) {
hideAllPopovers();
isVisible = false;
});
});
http://jsfiddle.net/AFffL/539/
唯一的警告是您将无法同时打开 2 个弹出窗口。但我认为这会让用户感到困惑,无论如何:-)