[JavaScript] setTimeout nie działa...

Odpowiedz Nowy wątek
2006-09-26 21:54

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0

Mam funkcję którą wywołuję w
<form ... onSubmit="submit_f()">

a funkcja wygląda tak:

<script>
function submit_f(){
  window.opener.location.reload();
  setTimeout("window.close();",3000);

}

</script>

Całość odbywa się w popupie i ma polegać na tym, że po
przetworzeniu formularza ma to zostać przeładowana strona z której
otwarłem popupa i po 3 sekundach zamknięty popup (jeśli daję bez
opóźnienia to czasami nie przetworzy formularza). Niestety nie
działa ten setTimeout i nie zamyka strony. Jak dam alert('ble'); po
setTimeout to wyswietl alerta i zamknie popup. Co to może być?


Pozostało 580 znaków

ŁF
2006-09-26 21:58
ŁF
Moderator

Rejestracja: 17 lat temu

Ostatnio: 3 minuty temu

0

to nie settimeout, tylko window.close() nie działa. w większości przeglądarek można wyłączyć możliwość zamykania okien przez skrypt.


Pozostało 580 znaków

2006-09-26 22:32

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0

Otóż window.close() działa jak wcześniej napisałem . Tylko w setTimeout'cie nie działa :/


Pozostało 580 znaków

2006-09-26 22:33

Rejestracja: 18 lat temu

Ostatnio: 2 tygodnie temu

0

Jeśli dobrze rozumiem to w popupie submitujesz formularz i w zdarzeniu onsubmit chcesz przeładować openera i zamknąć popupa. Jeśli tak to bezsensu to zaplanowałeś, bo nie możesz zamknąć popupa, który jeszcze się nie przeładował a jak wpiszesz opóźnienie przez setTimeout to zostanie ono usunięte po przeładowaniu popupa. Przydało by Ci się zdarzenie afterSubmit, ale takiego nie ma, więc spróbuj inaczej zaprojektować skrypt.


Pozostało 580 znaków

2006-09-26 22:54

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0
<ort>na pewno</ort> cała... sprawa jest conajmniej dziwna, bo w żadnym zdarzeniu to nie działa (onClick, onMouseOver,onSubmit), ale jak wywołam tą funkcje z znaczników <script> to działa... Dziwność ...

Pozostało 580 znaków

2006-09-26 23:17

Rejestracja: 16 lat temu

Ostatnio: 8 lat temu

0

pokaż jak to masz wszystko zrobione - najprostszą wersję wszystkiego - włącznie z oknem opener


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-09-26 23:22

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0

Będzie ciężko, bo to jest system cms, i jest tego sporo, bardzo sporo...

Generalnie główną ideę przedstawiłem. To co pokazałem nie działa w zdarzeniach, a tylko w normalnym <script></script>
onLoada nigdzie nie ma.


Pozostało 580 znaków

2006-09-26 23:33

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0

A oto prosze państwa rozwiązanie tego problemu:

884768 (http://support.microsoft.com/kb/884768/PL/) BUG: You cannot close an Internet Explorer window by using the window.setTimeout(window.close,1) method in Windows XP Service Pack 2 (z tym, że ja mam SP1 i firefoxa).

Ale to też nie to, bo jak wywalę submita a wywołanie funkcji dam do to działa i zamyka okienko, a jak mi submituje, to tylko przeładuje openera a okienka qrde nie zamyka.


Pozostało 580 znaków

2006-09-27 16:43

Rejestracja: 18 lat temu

Ostatnio: 2 tygodnie temu

0
wowo napisał(a)

A oto prosze państwa rozwiązanie tego problemu:

Pudło, tam są tylko podobne wyrazy.

Ale to też nie to, bo jak wywalę submita a wywołanie funkcji dam do to działa i zamyka okienko, a jak mi submituje, to tylko przeładuje openera a okienka qrde nie zamyka.

przeczytaj jeszcze raz co napisalem, przeladowanie strony niszczy setTimeout, na tej przeladowanej juz go nie ma, nie zyje...

zrob tak:

index.html
----------------------
<a href="javascript:void(open('popup.html'))">otworz okno</a>
popup.html
----------------------
<script>
function submit_f() {
  opener.location.reload();
  // setTimeout('close()', 3000); <-- to jest zle, to nie istnieje jak sie przetworzy formularz
  // po submit'cie laduje sie nowa strona i na niej juz nie dziala setTimeout z poprzedniej
  // nawet gdybys action formularza ustawil na ten sam dokument w ktorym jest formularz
}
</script>
<form action="inna.html" onsubmit="submit_f()">
  <input type="submit">
</form>
inna.html
----------------------
<script>
  close(); // <-- tu jest dobrze
</script>

Pozostało 580 znaków

2006-09-28 10:40

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0
piechnat napisał(a)

przeczytaj jeszcze raz co napisalem, przeladowanie strony niszczy setTimeout, na tej przeladowanej juz go nie ma, nie zyje...

Masz rację, niepotrzebnie się tak upierałem przy moich tezach ;-)

Problem rozwiązałem, bo jak się okazało twórca cmsa ustawił zmienną w systemie szablonów dla body onloada i teraz jak doda się do bazy co trzeba to sobie tam wrzucam ten reload i window.close i wszystko śmiga jak powinno :-)


Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0