Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [js] Przenoszenie danych pomiędzy oknami, Za długi czas otwierania okna?
windman
post 13.03.2008, 13:49:16
Post #1





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

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


W głównym oknie mam skrypt otwierający nowe, mniejsze okno.
Chcę aby jednocześnie przy otwieraniu nowego okna do diva (w tym nowym oknie) o id 'komunikat' wskoczyła zawartość zmiennej 'tresc', która została zdefiniowana w skrypcie w tym pierwszym oknie.

pozdrawiam

Ten post edytował windman 13.03.2008, 18:22:16
Go to the top of the page
+Quote Post
lord_t
post 13.03.2008, 14:01:37
Post #2





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

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


http://forum.php.pl/index.php?showtopic...

Drugą linijkę zamien na
  1. win.document.getElementById('twoje_id').innerHTML=twoja_zmienna.


--------------------
Go to the top of the page
+Quote Post
windman
post 13.03.2008, 17:47:02
Post #3





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

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


Dzięki!
W ten sam sposób kombinowałem zanim napisałem, musiałem mieć gdzieś błąd bo okno się otwierało ale div nie był uzupełniany, teraz już jest OK.

Pozdrawiam

A jednak nie jest tak jak być powinno.

Raz działa, raz nie.
Czasem wyskakuje błąd: document.getElementById() jest pusty lub nie jest obiektem

wydaje mi się, że problem tkwi w tym, że to nowe okno nie zawsze otworzy się na czas aby skrypt mógł odnaleźć dane ID.

Co o tym myślicie?
Go to the top of the page
+Quote Post
lord_t
post 13.03.2008, 18:30:16
Post #4





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

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


Może timeout? Zamien 2 linijkę na:
Kod
setTimeout("win.document.getElementById('twoje_id').innerHTML=twoja_zmienna;",1000);


Jeśli problem jest w opóźnieniu to powyższe rozwiązanie może pomóc, ale to nie 100%-owo dobre rozwiązanie => problem pojawi się jeśli okienko będize się otwierać dłużej niż sekunda.

Dłuższe (ale i zapewniające 100% pewność) rozwiązanie: sprawdzanie czy okno się otwarło (lub czy istnieje w nowym oknie ów div) tak długo, aż zaistnieje;po czym wstawienie zawartości zmiennej.


--------------------
Go to the top of the page
+Quote Post
windman
post 13.03.2008, 18:47:36
Post #5





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

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


Cytat(lord_t @ 13.03.2008, 18:30:16 ) *
Dłuższe (ale i zapewniające 100% pewność) rozwiązanie: sprawdzanie czy okno się otwarło (lub czy istnieje w nowym oknie ów div) tak długo, aż zaistnieje;po czym wstawienie zawartości zmiennej.

Rozumiem, że będzie tutaj potrzebna jakaś pętelka, mógłbyś coś podrzucić?
Go to the top of the page
+Quote Post
lord_t
post 13.03.2008, 19:36:34
Post #6





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

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


Na myśli miałem co poniżej. Wstaw zamiast 2. linijki: zmien();

Kod
function zmien()
{
var tmp=win.document.getElementById('twoje_id');
if (tmp == null) //div jeszcze nie utworzony
  setTimeout("zmien();",500);
else //div istnieje
  tmp.innerHTML=twoja_zmienna;
}


Pisane z palca, możliwe literówki i drobne błędy.

Ten post edytował lord_t 13.03.2008, 19:36:53


--------------------
Go to the top of the page
+Quote Post
windman
post 13.03.2008, 20:26:43
Post #7





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

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


ręce mi już opadaj, przecież to musi działać!!!

metodę z pętlą mam tak:

  1. <?php
  2. function komunikat(){ 
  3.  
  4.  var win=window.open("okno.html", "a", "width=300,height=200,left=0,top=0");
  5.  
  6.  function zmien(){
  7. var tmp=win.document.getElementById('tytul');
  8. if(tmp == null){
  9.  setTimeout("zmien()",1000);
  10. }else{
  11.  tmp.innerHTML="Tresc";
  12. }
  13.  }//function zmien(){
  14.  
  15.  zmien();
  16.  
  17. }//function komunikat(){
  18. ?>

Okno się otwiera ale wyskakuje: zmien is not defined, ale tutaj mogłem coś namieszać...

Natomiast przykład z opóźnieniem:
  1. <?php
  2. function komunikat(){
  3.  var win=window.open("okno.html", "a", "width=300,height=200,left=0,top=0");
  4.  var zmienna="Jakaś treść"; 
  5.  var tytul="tytul"; 
  6.  setTimeout("win.document.getElementById(tytul).innerHTML=zmienna",2000); //TUTAJ WYSKAKUJE BŁĄD
  7.  }
  8. ?>

i tutaj dostaje komunikat: win is not defined
Go to the top of the page
+Quote Post
lord_t
post 13.03.2008, 21:57:45
Post #8





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

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


Bije się w pierś bo zapomniałem, że win musi być dostępne przy każdym wywołaniu zmien(); Poprawiony i działający kod:

  1. <script type="text/javascript">
  2. <!--
  3.  
  4. var win;
  5.  
  6. function zmien(){
  7. var tmp=win.document.getElementById('tytul');
  8. if(tmp == null)
  9. setTimeout("zmien()",1000);
  10. else
  11. tmp.innerHTML="Tresc";
  12. }
  13.  
  14. function komunikat(){
  15. win=window.open("okno.html", "a", "width=300,height=200,left=0,top=0");
  16. zmien();
  17. }
  18.  
  19. //-->


Ten post edytował lord_t 13.03.2008, 21:59:43


--------------------
Go to the top of the page
+Quote Post
windman
post 13.03.2008, 22:30:18
Post #9





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

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


Cytat(lord_t @ 13.03.2008, 21:57:45 ) *
Bije się w pierś bo zapomniałem, że win musi być dostępne przy każdym wywołaniu zmien(); Poprawiony i działający kod:

Teraz faktycznie jest ok, dzięki!
Napisz jeszcze proszę co jest skopane w tym przykładzie z opóźnieniem setTimeout - przyda się na przyszłość.

pozdrawiam
Go to the top of the page
+Quote Post
lord_t
post 13.03.2008, 22:50:58
Post #10





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

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


Tam błąd polegał (na 99%) na tym samym co w poprawianym kodzie: win jest widziane tylko w funkcji, a setTimeout wywoła to już poza funkcją => win tam już nie widać.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:38