2014-12-01 56 views
14

我想以編程方式銷燬&重新創建特定的Bootstrap彈出窗口。所以我所做的是:Bootstrap popover只會每隔一秒就銷燬並重新創建作品

$('#popoverspan').popover('destroy'); 
$('#popoverspan').popover({placement : 'bottom', trigger : 'hover', content : 'Here it is!'}); 

而且它每隔一秒只工作一次。我認爲這是銷燬彈出窗口的時間問題,但即使在兩條線之間添加延遲也無濟於事。我在JSFiddle中重新創建了這個問題:http://jsfiddle.net/Lfp9ssd0/10/

這是爲什麼?有人建議它可以工作,例如,在Twitter Bootstrap Popover with dynamically generated content via ajaxBootstrap Popover Reinitialization (To refresh Content)

它工作得很好,當我跳過摧毀,但我不知道當我爲一個元素創建另一個popover而不摧毀已有的popover時會發生什麼。它是否被重新初始化,或者它是否會失去訪問舊的popover?

回答

20

自己解決了。顯然.popover('destroy')是異步的,並且立即創建另一個彈出窗口失敗,而前一個被破壞。我嘗試使用alert添加延遲,由於某些原因失敗。使用setTimeout()之前創造新的酥料餅是不是最優雅,但工作液:

$('#popoverspan').popover('destroy'); 
setTimeout(function() { 
    $('#popoverspan').popover({ 
     placement : 'bottom', 
     trigger : 'hover', 
     content : 'Here is new popover!' 
    }); 
}, 200); 

200毫秒似乎不夠,但它可能需要在其他情況下微調。

+1

Dangit!這讓我瘋狂。我從來沒有想過這是一個異步調用。感謝您的領導! – 2016-12-14 15:28:25

+0

我也猜想這是一個異步調用..現在你驗證這個猜測。非常困難,需要至少2個小時的我:( – flipperweid 2017-05-17 06:12:46

+0

感謝您拯救我!我花了幾個小時在這! – 2017-10-23 16:35:03

5

我遇到了與此處所述相同的問題。經過廣泛的搜索之後,我找到了一種方法來更改popover的內容,而不必先摧毀它。只需在未指定內容選項的情況下初始化彈出窗口。

$('#popoverspan').popover({ 
    placement : 'bottom', 
    trigger : 'hover', 
}); 

請注意,上面的彈出式初始化並未指定內容。 popover無法顯示,它沒有內容。現在指定導致彈出窗口中顯示不同類型文本的條件。

if (condition_1) { 
    $("#popoverspan").data('bs.popover').options.content = "Something important here!" 
} 
else { 
    $("#popoverspan").data('bs.popover').options.content = "This is also important!" 
} 

現在我們準備展示popover。

$("#popoverspan").popover('show'); 

這對Bootstrap 3.0有效。當然,當你準備好時,當頁面上發生適當的事件時,你可以像平常一樣銷燬或隱藏彈出窗口。

更新: 如果你只需要改變酥料餅之後的文字酥料餅是顯示已經,你基本上可以使用相同的技術。 1)獲取附加彈出窗口的DOM,然後更改內容並再次顯示彈出窗口。下面的例子:

$("#popoverspan").data('bs.popover').options.content = "some new text"; 
$("#popoverspan").popover('show'); 
0

@Deniz答案是偉大的,但如果你想酥料餅的顯示後更改標題/內容,你是老年引導版本(我的是3.3.1),你應該使用$('.your_popover_target').data('popover').options.content = "new text"而不是.data('bs.popover'),接着是$('.your_popover_target').popover('show');

0

我試過setTimeout的方法,由於某種原因它沒有工作,然後我深入研究了popover對象,實際上有一個destroy()方法工作得很好。例如。:

var popover = $.data($('#popoverspan'), "bs.popover"); 
popover.destroy();