[解決済み】Twitter Bootstrapのポップオーバーを外側のクリックで解除する方法は?
質問
ポップオーバーをモーダルと同じように、ユーザーがクリックしたときに閉じるようにできますか?
残念ながら、ポップオーバーの代わりに本物のモーダルを使うことはできません。モーダルはposition:fixedを意味するので、ポップオーバーではなくなってしまうからです :(
どうすればいいですか?
更新してください。 もう少ししっかりした解決策を。 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");
}
}
});
});
関連
-
[解決済み] Twitter Bootstrapのメニューをクリックではなく、ホバーでドロップダウンさせる方法
-
[解決済み] Twitter Bootstrap 3を使用して列を中央に配置する
-
[解決済み] Bootstrapの列をすべて同じ高さにするにはどうしたらいいですか?
-
[解決済み] Twitter Bootstrapでナビバーの色を変更する
-
[解決済み] Twitter Bootstrap Form File Element Upload Button(ファイルアップロードボタン
-
[解決済み] Twitter Bootstrapを使った中央寄せのコンテンツはどうなっているのか?
-
[解決済み] Twitter Bootstrapのボタンを右寄せにするにはどうしたらいいですか?
-
[解決済み] twitterのbootstrapで五等分の列を作る
-
[解決済み】Twitter Bootstrapのポップオーバー内のHTML
-
[解決済み] 行を組み合わせたブートストラップ(rowspan)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Bootstrap 4のColでコンテンツを下に揃える方法
-
[解決済み] Bootstrap:Bootstrapのバージョンを識別する方法は?
-
[解決済み】twitter bootstrap 2で送信ボタンにアイコンを追加する。
-
[解決済み】Font-awesome、入力タイプ'submit'
-
[解決済み】これらの属性は何ですか。アリア・ラベリングビー`とアリア・ヒドゥン`です。
-
[解決済み] Twitter ブートストラップ スクロール可能なテーブル
-
[解決済み] Bootstrap 3 のスタックドタブ
-
[解決済み] Twitter Bootstrapのポップオーバーをページ上の任意の場所(他の場所)からクリックして閉じるにはどうすればよいですか?
-
[解決済み] Twitter Bootstrapのテーブルの幅が常に100%なのはなぜですか?
-
[解決済み] Bootstrap: コンテナの幅を変更するには?