Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] Przenoszenie danych pomiędzy oknami
Forum PHP.pl > Forum > Przedszkole
windman
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
lord_t
http://forum.php.pl/index.php?showtopic...

Drugą linijkę zamien na
  1. win.document.getElementById('twoje_id').innerHTML=twoja_zmienna.
windman
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?
lord_t
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.
windman
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ć?
lord_t
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.
windman
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
lord_t
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. //-->
windman
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
lord_t
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ć.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.