私のために働いた非常に簡単な解決策は次のとおりです。
// suppose that popover is defined in HTML
$('a.foo').popover();
// when popover's content is shown
$('a.foo').on('shown.bs.popover', function() {
// set what happens when user clicks on the button
$("#my-button").on('click', function(){
alert("clicked!!!");
});
});
// when popover's content is hidden
$('a.foo').on('hidden.bs.popover', function(){
// clear listeners
$("#my-button").off('click');
});
これが機能する理由: 基本的に、ポップオーバーのコンテンツには、ポップオーバーが開かれるまでリスナーがありません。
ポップオーバーが表示されると、ブートストラップはそのイベントを発生させますshown.bs.popover
。$(a.foo)
jQueryon
メソッドを使用して、このイベントにイベント ハンドラーをアタッチできます。そのため、ポップオーバーが表示されると、ハンドラー (コールバック) 関数が呼び出されます。このコールバックでは、イベント ハンドラーをポップオーバーのコンテンツにアタッチできます。たとえば、ユーザーがポップオーバー内のこのボタンをクリックするとどうなりますか。
ポップオーバーが閉じられたら、ポップオーバーのコンテンツにアタッチされているすべてのハンドラーを削除することをお勧めします。これは、jQueryメソッドhidden.bs.popover
でハンドラーを削除するハンドラーを介して行われます。.off
これにより、ポップオーバーが再び開かれたときに、ポップオーバー内のイベント ハンドラーが 2 回 (およびそれ以上) 呼び出されるのを防ぎます...