업데이트 : 약간 더 강력한 솔루션 : http://jsfiddle.net/mattdlockyer/C5GBU/72/
텍스트 만 포함 된 버튼의 경우 :
$('body').on('click', function (e) {
//did not click a popover toggle or popover
if ($(e.target).data('toggle') !== 'popover'
&& $(e.target).parents('.popover.in').length === 0) {
$('[data-toggle="popover"]').popover('hide');
}
});
아이콘 이 포함 된 버튼 사용 (이 코드에는 Bootstrap 3.3.6에 버그가 있음,이 답변의 아래 수정 사항 참조)
$('body').on('click', function (e) {
//did not click a popover toggle, or icon in popover toggle, or popover
if ($(e.target).data('toggle') !== 'popover'
&& $(e.target).parents('[data-toggle="popover"]').length === 0
&& $(e.target).parents('.popover.in').length === 0) {
$('[data-toggle="popover"]').popover('hide');
}
});
JS 생성 팝 오버'[data-original-title]'
대신 사용'[data-toggle="popover"]'
주의 사항 : 위의 솔루션을 통해 여러 팝 오버를 한 번에 열 수 있습니다.
한 번에 한 번의 팝 오버 :
업데이트 : Bootstrap 3.0.x, 코드 또는 바이올린 참조 http://jsfiddle.net/mattdlockyer/C5GBU/2/
$('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');
}
});
});
이것은 이미 열려 있고 클릭하지 않았거나 링크를 클릭하지 않은 팝 오버 닫기를 처리합니다.
업데이트 : Bootstrap 3.3.6, 바이올린 참조
닫은 후 다시 열려면 2 번 클릭하는 문제가 해결되었습니다.
$(document).on('click', function (e) {
$('[data-toggle="popover"],[data-original-title]').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').data('bs.popover')||{}).inState||{}).click = false // fix for BS 3.3.6
}
});
});
업데이트 : 이전 개선 조건을 사용 하여이 솔루션을 달성했습니다. 더블 클릭 및 고스트 팝 오버 문제를 해결하십시오.
$(document).on("shown.bs.popover",'[data-toggle="popover"]', function(){
$(this).attr('someattr','1');
});
$(document).on("hidden.bs.popover",'[data-toggle="popover"]', function(){
$(this).attr('someattr','0');
});
$(document).on('click', function (e) {
$('[data-toggle="popover"],[data-original-title]').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) {
if($(this).attr('someattr')=="1"){
$(this).popover("toggle");
}
}
});
});