ポップオーバーをモーダルと同じように閉じられるようにすることはできますか? つまり、ユーザーがポップオーバーの外側のどこかをクリックするとポップオーバーが閉じるようにできますか?
残念ながら、ポップオーバーの代わりに実際のモーダルを使用することはできません。モーダルは position:fixed を意味し、ポップオーバーではなくなるためです。:(
ベストアンサー1
更新:もう少し強力なソリューション: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"]'
注意:上記の解決策では、複数のポップオーバーを一度に開くことができます。
ポップオーバーは一度に 1 つずつお願いします。
アップデート: 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");
}
}
});
});