2012-08-14 11 views
20

Nowe ogłoszenie na stackoverflow tutaj, więc moje przeprosiny z góry, jeśli pomieszałem coś tutaj.Twitter Bootstrap Popovers nie działa dla zawartości generowanej dynamicznie

Używam popoukładów Twittera Bootstrapa. Moje popovers wydają się działać dla elementów, które ręcznie wpisuję do mojego dokumentu HTML - ale NIE elementów, które dynamicznie generuję przez JavaScript/Ajax.

Na przykład popover wydaje się działać, jeśli ręcznie dodać to bezpośrednio do mojego dokumentu HTML:

<p rel=popover data-content='It is so simple to create a tooltop for my website!' data-original-title='Twitter Bootstrap Popover'>hover for popover</p> 

Ale to, co naprawdę potrzebne jest dla mojego dynamicznie generowane elementy mieć popovers. Używam XMLHttpRequest, aby wysłać zapytanie do pliku PHP, a następnie pobrać tekst responseText i wyświetlić go. Kiedy dodać poniższy wiersz kodu do mojego wspomnianego pliku PHP:

echo "<p rel=popover data-content='It is so simple to create a tooltop for my website!' data-original-title='Twitter Bootstrap Popover'>hover for popover</p>"; 

... na tyle pewnie, słowa „aktywowania dla popover” pojawiają się - ale sam popover nie działa!

To doprowadzało mnie do szału przez jakiś czas i byłoby niewiarygodnie, gdyby ktoś mógł mi pomóc! Dodałem także funkcję JQuery, której używam, aby włączyć popoukryty Bootstrapa poniżej, o ile to jest warte.

$(function(){ 
$("[rel=popover]").popover({placement:'left'}); 
}); 

Zrobiłem dokładne przeszukanie podobnych problemów i najlepsze co mogłem znaleźć był this link. Ale wydaje się, że ten link nie zawiera żadnych rozwiązań. Z góry dziękuję jeszcze raz!

UPDATE:

Poprawiono! Wielkie dzięki dla wszystkich, którzy pomogli. Mój problem polegał na tym, że funkcja była wywoływana ZANIM elementy zostały dodane do Modelu obiektów dokumentu. Istnieje wiele możliwych poprawek - po prostu przetestowałem rozwiązanie, przesuwając funkcję popover na END funkcji Ajax i zadziałało!

+1

Jak się masz dodanie HTML zwrócony przez wywołanie AJAX do DOM? –

+0

Podobne pytanie; http://stackoverflow.com/questions/16990573/how-to-bind-bootstrap-popover-on-dynamic-elements –

Odpowiedz

17

Musisz zadzwonić pod numer $("[rel=popover]").popover({placement:'left'}); PO elementach w DOM.

UPDATE

Jeśli używasz jQuery

$(element_selector) 
    // load results into HTML of element_selector 
    .load('your/php/file') 
    // when done, initialize popovers 
    .done(function(){ 
    $("[rel=popover]").popover({placement:'left'}); 
    }); 

LUB haczyk wszystko dla jQuery AJAX żąda

$.ajaxComplete(function(){ 
    $("[rel=popover]").popover({placement:'left'}); 
    }); 
+1

On musi używać jQuery, prawda? –

+1

Tak, ale myślę, że zostało to przyjęte, ponieważ nazywa '$ (" [rel = popover] ").popover ({placement: 'left'}); ' – nickaknudson

+0

To zadziałało! Miałeś rację, moja funkcja była wywoływana przed wygenerowaniem elementów w DOM. Dziękuję bardzo za pomoc, nauczyła mnie również w tym procesie. Teraz działa bezbłędnie. Głosowałbym na ciebie, gdybym mógł! xD – ryzh

2

W funkcji sukcesu ajax trzeba zadzwoń do popover. Coś takiego

success:function(){ 
    $("[rel=popover]").popover({placement:'left'}); 
} 
+0

Dziękujemy! Tak, zdałem sobie sprawę, że moja funkcja była wywoływana przed wygenerowaniem elementów w DOM. Dziękuję bardzo za pomoc, nauczyła mnie również w tym procesie! – ryzh

+0

Serdecznie zapraszamy ... – Nick

0

Funkcja ta będzie działać prawidłowo w selektorze trzeba określić lokalizację na stronie, gdzie trzeba szukać „rel = popover” jak kładę *

$(function() 
{ 
console.info($("*[rel=popover]")); 
$("*[rel=popover]").popover(); 
}); 
Powiązane problemy