Używam wyskakującego okienka modalnego Twittera bootstrap.
<div id="myModal" class="modal hide fade in">
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>Header</h3>
</div>
<div class="modal-body"></div>
<div class="modal-footer">
<input type="submit" class="btn btn-success" value="Save"/>
</div>
</div>
Mogę załadować zawartość za pomocą Ajax z tym elementem a:
<a data-toggle="modal" data-target="#myModal" href="edit.aspx">Open modal</a>
Teraz muszę otworzyć ten sam modalny, ale używając innego adresu URL. Używam tego modalu do edycji encji z mojej bazy danych. Więc kiedy klikam edytuj na encji, muszę załadować modal z identyfikatorem.
<a data-toggle="modal" data-target="#myModal" href="edit.aspx?id=1">Open modal</a>
<a data-toggle="modal" data-target="#myModal" href="edit.aspx?id=2">Open modal</a>
<a data-toggle="modal" data-target="#myModal" href="edit.aspx?id=3">Open modal</a>
Jeśli kliknę link numer 1, działa dobrze. Ale jeśli następnie kliknę link numer 2, zawartość modalna jest już załadowana i dlatego wyświetli zawartość z linku numer 1.
Jak mogę odświeżyć lub zresetować załadowaną zawartość Ajax w modalnym wyskakującym okienku bootstrap na Twitterze?
javascript
twitter-bootstrap
stian.net
źródło
źródło
Odpowiedzi:
Mam ten sam problem i myślę, że sposobem na zrobienie tego będzie usunięcie atrybutu przełączania danych i utworzenie niestandardowego modułu obsługi łączy.
Coś w rodzaju:
Spróbuję później i opublikuję komentarze.
źródło
Aby wyładować dane, gdy modal jest zamknięty, możesz użyć tego z Bootstrap 2.x:
Oraz w Bootstrap 3 ( https://github.com/twbs/bootstrap/pull/7935#issuecomment-18513516 ):
źródło
Możesz zmusić Modal do odświeżenia wyskakującego okienka, dodając ten wiersz na końcu metody ukrywania wtyczki Modal (jeśli używasz bootstrap-transit.js v2.1.1, powinien znajdować się w linii 836)
Lub ze słuchaczem wydarzeń
źródło
load()
wywołania z konstruktora doshow()
lub dodanie metody do wtyczki, aby ręcznie uruchomić ponowne załadowanieremote
. Jeśli chodzi o drugą sugestię, podałem ją tylko jako odpowiedź na pytanie, w którym wyraźnie prosiłem, aby nie robić tego w sposób sugerowany przez @markz .W Bootstrap 3 możesz użyć modułu obsługi zdarzeń `` hidden.bs.modal '', aby usunąć wszelkie dane związane z modalem, zmuszając wyskakujące okienko do ponownego załadowania następnym razem:
źródło
Na podstawie innych odpowiedzi (dzięki wszystkim).
Musiałem dostosować kod do pracy, ponieważ zwykłe wywołanie .html wymazało całą zawartość, a modal nie ładował się żadną zawartością po tym, jak to zrobiłem. Więc po prostu szukałem obszaru zawartości modalu i zastosowałem tam resetowanie HTML.
Nadal może pójść z zaakceptowaną odpowiedzią, ponieważ dostaję brzydki skok tuż przed ładowaniem modalnym, ponieważ kontrola jest z Bootstrapem.
źródło
Nieco bardziej skompresowany niż powyższy akceptowany przykład. Przechwytuje cel z celu danych aktualnie klikniętego elementu z włączoną opcją data-toggle = modal. To sprawia, że nie musisz wiedzieć, jaki jest identyfikator docelowego modalu, po prostu użyj tego samego! mniej kodu = wygrana! Możesz również zmodyfikować to, aby załadować tytuł, etykiety i przyciski dla swojego modalu, jeśli chcesz.
Przykładowe linki:
źródło
Zrobiłem małą zmianę w odpowiedzi Softlion , więc wszystkie moje modały nie odświeżają się po ukryciu. Modały z atrybutem data-refresh = 'true' są tylko odświeżane, inne działają jak zwykle. Oto zmodyfikowana wersja.
Teraz użyj atrybutu, jak pokazano poniżej,
Zapewni to odświeżenie tylko modali z data-refresh = 'true'. Zresetowałem również modalny kod HTML, ponieważ stare wartości są wyświetlane, dopóki nie zostaną załadowane nowe, co powoduje, że pusty kod HTML rozwiązuje ten problem.
źródło
Oto wersja Coffeescript, która zadziałała dla mnie.
źródło
Będzie działać dla wszystkich wersji twitterbootstrap
Kod JavaScript:
linki do modalnych są
pop up modalne
źródło
Utknąłem też w tym problemie, a potem zobaczyłem, że identyfikatory modalu są takie same. Jeśli chcesz mieć wiele modali, potrzebujesz różnych identyfikatorów modali. Użyłem dynamicznego identyfikatora . Oto mój kod w
haml
:możesz to zrobić
a twoje linki do modalu będą
Mam nadzieję, że to zadziała.
źródło
Możesz spróbować tego:
źródło
Chciałem, aby zawartość ładowana przez AJAX została usunięta po zamknięciu modalu, więc dostosowałem linię sugerowaną przez innych (składnia coffeescript):
źródło
var $ table = $ ('# myTable2');
$ table.bootstrapTable ('zniszcz');
Pracował dla mnie
źródło
Krok 1: Utwórz opakowanie dla modalu o nazwie
clone-modal-wrapper
.Krok 2: Utwórz pusty element div o nazwie
modal-wrapper
.Krok 3: Skopiuj element modalny z
clone-modal-wrapper
domodal-wrapper
.Krok 4: Przełącz tryb
modal-wrapper
.źródło