2012-04-19 80 views
46

我正在使用bootstrap-popover在元素旁邊顯示消息。如何更新引導彈出文本?

如果我想在第一次彈出後顯示不同的文字,文字不會改變。用新文本實例化彈出窗口不會被覆蓋。

見這個js搗鼓一個活生生的例子:

http://jsfiddle.net/RFzvp/1/

(在警報和DOM中的消息。該消息是第一次點擊後不一致) 文檔是如何略顯清淡解除綁定:http://twitter.github.com/bootstrap/javascript.html#popovers

我使用這個錯誤嗎?有關如何解決的任何建議?

感謝

回答

45

你好,請參見工作演示這裏:http://jsfiddle.net/4g3Py/1/

我所做的更改,以得到您想要的結果。 :)

我想你已經知道你在做什麼,但是從我結束了一些建議,例如作爲樣本如下:http://dl.dropbox.com/u/74874/test_scripts/popover/index.html# - 共享此鏈接給你的想法與各種彈出了,如果你會看到不同的源鏈接通知屬性data-content但您想要的是通過以下更改。

有一個不錯的,希望這可以幫助。 D'呃不要忘記了投票,並接受了答案:)

jQuery代碼

var i = 0; 
$('a#test').click(function() { 
    i += 1; 

    $('a#test').popover({ 
     trigger: 'manual', 
     placement: 'right', 
     content: function() { 
      var message = "Count is" + i; 
      return message; 
     } 
    }); 
    $('a#test').popover("show"); 

});​ 

HTML

<a id="test">Click me</a> 
​ 
+1

你的先生是一個學者和一個紳士。謝謝! – Chris 2012-04-19 13:22:49

+1

:P @Chris你bruv是一個傳奇innit :),很高興它幫助! – 2012-04-19 19:28:36

+3

I F *&$ IGN LOVE YOU! – ThomasReggi 2012-08-14 19:14:17

70

您可以直接使用jQuery訪問選項數據關閉字典是這樣的:

$('a#test').data('bs.popover').options.content = 'new content'; 

即使首次初始化彈出窗口,此代碼也應該正常工作。

+5

不錯的一個。我不得不爲$(this).popover('show');'爲已經可見的彈出窗口更新 – periklis 2013-06-30 07:21:24

+9

在引導3中,名稱空間被更改:您必須:$('a#test') 。數據(「BS。popover')。options.content ='new content'; – dAm2K 2014-02-03 16:12:52

+0

@ dAm2K:謝謝,回答更新 – 2014-06-07 08:45:17

21

只是在情況下任何人都在尋找不涉及重新實例化popover,只是想改變內容的HTML的解決方案,看看這個:

$('a#test').data('popover').$tip.find(".popover-content").html("<div>some new content yo</div>") 

更新:在被寫入這個答案之間的某一點和Bootstrap 3.2.0(我在3.0懷疑?)這個變化不大,到:

$('a#test').data('bs.popover').tip().find ............ 
+0

這對我有幫助,因爲我需要在關鍵事件期間更新彈出窗口,本頁頂部的答案沒有解決。謝謝! – 828 2013-02-07 01:19:46

+1

請注意,只要您關閉並重新打開彈出窗口,內容仍將是原始內容。爲了確保內容在每次彈出窗口打開時都是新內容,您還應該包含來自@ user698585 – vitorbal 2013-03-20 15:15:40

+1

的提示當我更改內容並顯示彈出窗口時,它仍顯示爲原始內容。我改變了順序。我展示了popover,然後改變了內容,它向我展示了新的內容。任何想法爲什麼? – Sri 2013-05-20 19:30:04

7

的問題是多一歲,但也許這將是有用的人。

如果內容僅在彈出窗口被隱藏時發生改變,我發現的最簡單的方法是使用一個函數和一些JS代碼。

具體來說,我的HTML看起來像:

<input id="test" data-toggle="popover" 
     data-placement="bottom" data-trigger="focus" /> 
<div id="popover-content" style="display: none"> 
    <!-- Hidden div with the popover content --> 
    <p>This is the popover content</p> 
</div> 

請注意,沒有指定數據內容。在JS,創建酥料餅的時候,一個功能用於內容:

$('test').popover({ 
    html: true, 
    content: function() { return $('#popover-content').html(); } 
}); 

現在你可以在任何地方改變酥料餅的內容DIV和酥料餅將被更新下一次顯示:

$('#popover-content').html("<p>New content</p>"); 

我想這個想法也可以使用純文本而不是HTML。

14

老問題,但因爲我注意到沒有答案提供了正確的方法,這是一個常見的問題,我想更新它。使用$("a#test").popover("destroy");-方法。 Fiddle here

這將破壞舊的彈出窗口並使您能夠以常規方式再次連接新彈窗。

下面是一個例子,您可以單擊一個按鈕,在已連接彈出窗口的對象上設置新的彈出窗口。請參閱小提琴瞭解更多細節。

$("button.setNewPopoverContent").on("click", function(e) { 
    e.preventDefault(); 

    $(".popoverObject").popover("destroy").popover({ 
     title: "New title" 
     content: "New content" 
    ); 
}); 
+0

謝謝:)。它爲我工作 – Banana 2016-05-02 11:05:26

+0

謝謝,一直在尋找這個小時。 – 2016-08-01 21:38:28

+0

我的bootstrap版本沒有「銷燬」方法。也許它改變了? – medley56 2017-09-11 19:26:13

2

你總是可以直接修改DOM:

$('a#test').next(".popover").find(".popover-content").html("Content"); 

例如,如果你想有一個酥料餅將從一個API加載一些數據並顯示,在酥料餅的懸停內容:

$("#myPopover").popover({ 
 
     trigger: 'hover' 
 
    }).on('shown.bs.popover', function() { 
 
     var popover = $(this); 
 
     var contentEl = popover.next(".popover").find(".popover-content"); 
 
     // Show spinner while waiting for data to be fetched 
 
     contentEl.html("<i class='fa fa-spinner fa-pulse fa-2x fa-fw'></i>"); 
 

 
     var myParameter = popover.data('api-parameter'); 
 
     $.getJSON("http://ipinfo.io/" + myParameter) 
 
     .done(function (data) { 
 
      var result = ''; 
 
      if (data.org) { 
 
      result += data.org + '<br>'; 
 
      } 
 
      if (data.city) { 
 
      result += data.city + ', '; 
 
      } 
 

 
      if (data.region) { 
 
      result += data.region + ' '; 
 
      } 
 
      if (data.country) { 
 
      result += data.country; 
 
      } 
 
      if (result == '') { 
 
      result = "No info found."; 
 
      } 
 
      contentEl.html(result); 
 
     }).fail(function (data) { 
 
      result = "No info found."; 
 
      contentEl.html(result); 
 
     }); 
 
    });
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet"/> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
<a href="#" id="myPopover" data-toggle="popover" data-title="IP Details" data-api-parameter="151.101.1.69">Hover here for details on IP 151.101.1.69</a>

這假定您信任API提供的數據。如果不是,您將需要轉移返回的數據來緩解XSS攻擊。

0

我發現Bootstrap popover content cannot changed dynamically,它介紹了setContent函數。因此,我的代碼(希望有用的人)是:

(注意到jQuery的數據()是不是這樣設定好,因爲它越來越)

// Update basket 
current = $('#basketPopover').data('content'); 
newbasket = current.replace(/\d+/i,parseInt(data)); 

$('#basketPopover').attr('data-content',newbasket); 
$('#basketPopover').setContent(); 
$('#basketPopover').$tip.addClass(popover.options.placement);