2012-09-08 83 views
30

這是我的標記:Twitter的引導:Popovers沒有顯示出來的第一次點擊,但出現在第二次點擊

<a href="#" class="reviews" id="like" rel="popover" data-content="" data-placement="right" data-original-title="Like episode"> 
    <i class="icon-thumbs-up"></i> 
    Loved it 
</a>(<span id="episode_likes">{{ episode_likes }}</span> 

這是JavaScript:

$('a.reviews#like').click(function(e){ 
    var element = $(this); 
    $.ajax({ 
     url: '/episoderatings/like/', 
     type: 'POST', 
     dataType: 'json', 
     data: { 
      csrfmiddlewaretoken: '{{ csrf_token }}', 
      episode_number: current, 
      story: current_story 
     }, 
     success: function(response){ 
      if(response=='You have liked this episode'){ 
       $('span#episode_likes').text(parseInt($('span#episode_likes').text())+1); 
      } 
      $(element).attr('data-content',response); 
      $(element).popover(); 
     } 
    }); 
    e.preventDefault(); 
}); 

問題是,當我點擊「喜歡」按鈕,彈出窗口不會在第一次點擊時顯示,所以我錯過了我是否喜歡該頁面的重要反應。當我點擊「喜歡」按鈕時,第二次彈出窗口出現,然後它從那裏開始保持它的切換行爲。並有想法?

+0

你需要調用'popover'頁面加載時? '$('a.reviews#like')。click(...)。popover()' –

+0

您是否嘗試過該解決方案?您是否可以在第二次點擊時隱藏彈出窗口? – markus

+0

是的。我嘗試了答案。它僅適用於普通文本的彈出式窗口,但對於其數據內容作爲由Ajax響應生成的「html」的彈出式窗口不起作用。 – 2013-01-29 22:39:39

回答

26

當您第一次點擊您的鏈接,沒有酥料餅還沒有初始化,即可以顯示。您通過致電$(element).popover();初始化彈出窗口。所以,你的代碼初始化彈出點擊鏈接,沒有什麼是第一次顯示。第二次點擊它時,彈出窗口就會顯示出來。

您必須調用.popover()鏈接被點擊之前。在你的情況

$('a.reviews#like') 
    .popover({trigger: 'manual'}) 
    .click(function(e){ 
     var element = $(this); 
     $.ajax({ 
      url: '/episoderatings/like/', 
      type: 'POST', 
      dataType: 'json', 
      data: { 
       csrfmiddlewaretoken: '{{ csrf_token }}', 
       episode_number: current, 
       story: current_story 
      }, 
      success: function(response){ 
       if(response=='You have liked this episode'){ 
        $('span#episode_likes').text(parseInt($('span#episode_likes').text())+1); 
       } 
       $(element).attr('data-content',response).popover('show'); 
      } 
     }); 
     e.preventDefault(); 
    }); 

應該做的伎倆。

公告第2行調用.popover({trigger: 'manual')初始化的酥料餅,並禁用它,你點擊後會出現一次。這不會有幫助,因爲您在AJAX回調中設置其內容,並且彈出窗口可以顯示出來。因此,在回調中,您必須在設置data-content屬性後,手動撥打.popover('show')

一兩件事:你必須調用.popover('hide')在某些時候,你表現出酥料餅後。當你再次點擊鏈接時它不會消失,因爲AJAX調用只會再次觸發,並且會再次調用.popover('show')。我能想到的一個解決方案是在彈出窗口處於活動狀態時向鏈接添加一個類,並在每次單擊時檢查該類。如果班級在那裏,您可以致電.popover('hide')並刪除該班級,否則請執行您的AJAX呼叫。我創建了a small jsfiddle來展示我的意思。

欲瞭解更多信息look at the docs

希望有所幫助。

+0

問題仍然存在。popover的主體沒有收到由ajax調用返回的響應。 –

+0

你說得對,我沒注意到。問題是,只要你點擊鏈接就會執行彈出窗口。但是這次'數據內容'還沒有設置。我改寫了我的帖子。請務必閱讀代碼,但也請閱讀關於如何隱藏popover的說明。 – j0ker

+0

非常感謝,我會試試:) –

相關問題