Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX] Okna dialogowe, podstawy.
Wishermil
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 10.04.2009

Ostrzeżenie: (0%)
-----


Witam!

Rozpocząłem swoją przygodę z Ajaxem i nigdzie nie mogę znaleźć tutoriala odnośnie kreowania samych okienek, wszędzie pchają jakieś zaawansowane moduły (galerie itp.). Mi chodzi tylko o sam szkielet.

Tzn.:

Klikam na link, który wywołuje Ajaxa wykonującego operacje na pliku php i chciałbym, aby po skończeniu operacji pojawiło się zwykłe okienko z informacją: "Poprawnie wykonane." Klikamy w puste pole i okienko się ładnie zamyka.

Z góry dziękuje za pomoc.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
toffiak
post
Post #2





Grupa: Zarejestrowani
Postów: 395
Pomógł: 80
Dołączył: 24.08.2009

Ostrzeżenie: (0%)
-----


Po otrzymaniu danych z serwera stwórz/odkryj (jeśli jest już stworzone ale ukryte) okienko, wypełnij je informacją i wyświetl.

Okienko może byc najzwyklejszym div-em z ustawionym position: fixed i odpowiednimm z-indeksem.

Można też skorzystać z wbudowanej metody alert() ale tą trudno ostylować.

Ten post edytował toffiak 15.02.2012, 16:41:11
Go to the top of the page
+Quote Post
Wishermil
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 10.04.2009

Ostrzeżenie: (0%)
-----


Właśnie chodzi mi o to, że nigdzie nie jestem w stanie znaleźć podstawowych informacji na temat samego szkieletu tworzenia okienek. Nie mam pojęcia jak je stworzyć, gdyż wszędzie napotykam jakieś skomplikowane kody. Mógłbyś przedstawić mi procedury, funkcje? Napisać przykładowe okienko dialogowe, które pobiera info z diva?
Go to the top of the page
+Quote Post
Kostek.88
post
Post #4





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jakiś czas temu robiłem takowe okienka. Teraz z pamięci w wielkim skrócie:

  1. <div id="wrapper"><div>
  2.  
  3. <div id="container">
  4. <div id="popup">
  5. <h1>Title</h1>
  6. <p>Content</p>
  7. </div>
  8. </div>


To wyżej to szkielet HTML: wrapper to ma być ciemne, półprzezroczyste tło za oknem, stąd div jest wyrzucony poza obszar, container to kontener na Twoje okienko: oba mają mieć ustawione position:fixed oraz width i height na 100%. Z kolei #popup ma być na środku ekranu? Jak to zrobić? Jak masz stałą szerokość okna to:

  1. #popup {
  2. position: absolute;
  3. top: 50%;
  4. left: 50%;
  5. margin: -100px 0 0 -200px; // marginesy ujemne równe połowie szerokości i wysokości okna
  6. width: 400px;
  7. height: 200px
  8. }


Jeśli chodzi o dynamicznej wielkości okno, to poszukać centering div horizontal vertical w google, albo zrób jQuery.

pozostałe elementy: <h1> - tytuł, <p> - treść

A teraz AJAX: (umieszczam w kodzie PHP, bo ładniej koloruje, niech Cię nie zmyli to)

  1. $(document).ready(function(){
  2.  
  3. $('a.link').click(function(){
  4. $.ajax({
  5. type: 'POST', // lub GET
  6. success: function(data) {
  7. $('body').append(sciezka); // sciezka do pliku HTML
  8. },
  9. beforeSend: function(){
  10. // tutaj mozesz wstawic loader
  11. },
  12. error: function(){
  13. $('body').append(sciezka);
  14. }
  15. });
  16. });
  17.  
  18. });


Aha, do samego okienka wrzuć jeszcze trochę jQuery
  1. $('div#container').click(function(){
  2. $('div#wrapper').remove();
  3. $('div#container').remove();
  4. })


ew. jak masz dużo takich okienek aktywnych już, to odwołuj się poprzez $(this)

  1. $('div#container').click(function(){
  2. $(this).prev('div#wrapper').remove();
  3. $(this).remove();
  4. });


A wtedy też pozamieniaj ID na class, co by się nie duplikowało. Oczywiście w kodzie może być sporo błędów, sam to zrobiłem jeszcze inaczej, ale generalnie idea jest taka. Co do wrappera, to tak sobie teraz pomyślałem, że możesz go wywalić, a zostawić sam container, tylko jak będziesz chciał ustawić tło półprzezroczyste, to nie używaj opacity, bo okno też Ci się takie zrobi... no chyba że zdefiniujesz kolor np. rgba(0,255,0, 0.5) - zielony przezroczysty 50%.

Co do kliknięcia poza okno i jego likwidacji, gdzieś na stronce jquery4u.com widziałem rozwiązanie, że wystarczy dać $('html').click ..... i wywołać akcję dla zamknięcia okna. Testowałem i działa. Aha... jest jeszcze jeden problem, oczywiście do obejścia.... jak klikniesz w samo okno, to też znika (IMG:style_emoticons/default/biggrin.gif) Musisz dać coś takiego

  1. $('div.popup').click(function(event){
  2. event.stopPropagation();
  3. });


Zapobiegasz wówczas rozprzestrzenienia się akcji z kontenera na okienko: po dodaniu tego kodu i kliknięciu na kontener, okno zamknie się, po kliknięciu w sam popup - nie. Oczywiście w ogóle nie musisz ładować konterena, tylko dać np. <a href="">x</a> i ustawić go w prawym górnym rogu okna i ostylować odpowiednio.

PS. Do tego potrzebna Ci biblioteka jQuery
PS2. Możesz dograć jQueryUI do tego i zrobić tak:

  1. $(div.popup).draggable({handle: 'h1'});


Wtedy uruchomisz opcję przeciągania i upuszczania okna chwytając za pasek tytułu, tj. H1, ew. $(div.popup).draggable(); - daje Ci możliwość przeciągania okna, gdziekolwiek go chwycisz.

Sorki za bałagan w wypowiedzi, ale naprawdę na szybko napisałem.
Go to the top of the page
+Quote Post
Wishermil
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 10.04.2009

Ostrzeżenie: (0%)
-----


Mimo wszystko dalej nie jestem w stanie stworzyć na podstawie tego okienka, które wyskoczy po kliknięciu w link. Wydaje mi się, że kod AJAX jest błędnie napisany. Zresztą nawet nie widzę w nim żadnego odniesienia do "diva", czy zawiązywania polecenia wyświetlenia okna. Myślę, że niepotrzebnie to tak mocno rozbudowałeś. Zależy mi na poznaniu samej struktury, bez żadnych konkretnych opcji z omówieniem poszczególnych linii kodu.

Ten post edytował Wishermil 16.02.2012, 01:10:57
Go to the top of the page
+Quote Post
Kostek.88
post
Post #6





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nie sadze bym to za bardzo rozbudowal, to jest raczej minimum jakie mozna zrobic, na pewno nie ma zmiany rozmiaru okienka i innych funkcji, ktore moglyby sie przydac. Co do wyswietlenia okienka to pewnie, ze zrobilem blad... powinno byc...


  1. $(document).ready(function(){
  2. $('a.link').click(function(){
  3. $.ajax({
  4. type: 'POST', // lub GET
  5. success: function(data) {
  6. $('body').load(sciezka); // mozesz tu dac drugiego AJAXa, bo load to skrocona forma
  7. },
  8. beforeSend: function(){
  9. // tutaj mozesz wstawic loader
  10. },
  11. error: function(){
  12. $('body').load(sciezka); // mozesz tu dac drugiego AJAXa, bo load to skrocona forma
  13. }
  14. });
  15. });
  16.  
  17. });?


Tutaj masz przykladowy kod samego okienka

http://jsfiddle.net/kostek/rL6Um/2/ - kod do samego okienka z draggable (edit: nie zapomnij, ze ten kod ma byc umieszony w osobnym pliku, ktory potem ladujesz przez AJAX)

I masz strukture i pole manewru do dalszej rozbudowy, zreszta pamietaj ze zamiast load mozesz wstawic nastepna funkcje ajax i na success ustawic 'body' jako Twoje odwolanie do diva. Dlaczego body? Bo najprosciej jest dolaczyc gotowy kod do body zamiast generowac niepotrzebne divy.

EDIT: ew. uzyc jQuery UI modal box... masz dosc duzo opcji konfiguracji, ale malo pole manewru jesli chodzi o zmiany.

Ten post edytował Kostek.88 16.02.2012, 13:13:52
Go to the top of the page
+Quote Post
Wishermil
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 10.04.2009

Ostrzeżenie: (0%)
-----


Świetnie, teraz wszystko już mi się rozjaśniło. Dzięki wielkie za zaangażowanie i pomoc. (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Kostek.88
post
Post #8





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Spoko, w razie czego nie bój sie pytać (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Ja ci jeszcze jeden link podrzucę http://www.paulrhayes.com/experiments/modal/
O ile nie przeszkadza brak obsługi poniżej IE9 można to teraz zrobić bez JS.
Go to the top of the page
+Quote Post
Kostek.88
post
Post #10





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dobry artykuł (IMG:style_emoticons/default/smile.gif) Dzięki wielkie, to i ja skorzystam (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 16:27