[JavaScript] setTimeout nie działa...

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ć?

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.

0

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

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.

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ść ...

0

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

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.

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.

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>
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 :-)

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