Avatar billede KlausEC Nybegynder
23. april 2010 - 15:12 Der er 10 kommentarer

setTimeout driller :s

Hej eksperter,

function callOpenerPreviousInfoList() {
    alert('1');
    ...
}
function submitEditSignal() {
    document.forms[0].submit();
    setTimeout("callOpenerPreviousInfoList()", 1000);
    //setTimeout(callOpenerPreviousInfoList, 1000); //virker heller ikke...
    //callOpenerPreviousInfoList(); //virker, men er for hurtig - vent ½-1 sekund.
    window.close();
}

Nogen, der kan forklare mig, hvorfor jeg aldrig når ind i første metode og alerter '1' hvis jeg kører med et timeout?
Avatar billede majbom Novice
23. april 2010 - 19:31 #1
ved ikke om det gør en forskel, men prøv:

var t = setTimeout("callOpenerPreviousInfoList()", 1000);
Avatar billede intenz Novice
24. april 2010 - 13:56 #2
Kan det ikke have noget at gøre med at du lukker vinduet lige efter du sætter setTimeout?

Prøv evt. at kommenter window.close(); ud og se om det ændrer noget.
Avatar billede KlausEC Nybegynder
26. april 2010 - 10:40 #3
der er altså et par interessante problemstillinger her...

Jeg har prøvet følgende:

function submitEditSignal() {
    document.forms[0].submit();
    callOpenerPreviousInfoList();
    setTimeout(function() {
        alert("window opener reloading...");
        callOpenerPreviousInfoList();
        alert("closing window...");
        window.close();
    }, 1500);   
}

Når jeg gør dette, får jeg aldrig de alerts, der er inde i min setTimeout, og funtionerne bliver så self. heller ikke kørt.

Og det ændrer ikke noget, om der er window.close i eller ej, for jeg har også prøvet det sådan her:

function submitEditSignal() {
    document.forms[0].submit();
    callOpenerPreviousInfoList();
    setTimeout(function() { alert("1000 ms later!"); }, 1000);   
}
Det giver heller ikke nogen alert...?

Er der ikke en javascript-haj derude, der ved, hvad jeg gør galt? :P
}
Avatar billede KlausEC Nybegynder
26. april 2010 - 10:47 #4
Det eneste, der virker er:

function submitEditSignal() {
    document.forms[0].submit();
    callOpenerPreviousInfoList();
    window.close();
}

Men problemet ved den er, at popup'ens opener window reloader for hurtigt på denne måde. Ændringerne der sker ved submit skal også lige nå at træde i kraft i databasen, så hvis jeg bare reloader vinduet med det samme, får jeg ikke ændringerne med.

Er der evt. en anden metode, jeg kan bruge til at få opener window'et til at vente lidt (eks. 1000 ms) med at reloade?
Avatar billede KlausEC Nybegynder
26. april 2010 - 11:23 #5
hmm

Dette virker til IE:

function submitEditSignal() {
    document.forms[0].submit();
    sleep(2500);
    callOpenerPreviousInfoList();
    window.close();
}
function sleep(delay)
{
    var start = new Date().getTime();
    while (new Date().getTime() < start + delay);
}

Men det virker ikke i IE :s
Avatar billede KlausEC Nybegynder
26. april 2010 - 11:24 #6
hov, skrivefejl - *Men det virker ikke i Firefox
Avatar billede intenz Novice
26. april 2010 - 12:00 #7
Du skal aldrig bruge sådan en sleep funktion til javascript. Det fryser hele browseren mens den 'sover'.

Prøv denne:
setTimeout(function() { callOpenerPreviousInfoList(); }, 1000);
Avatar billede KlausEC Nybegynder
26. april 2010 - 12:08 #8
Jeg er klar over, at den fryser, men jeg har lidt svært ved at finde andre alternativer...

setTimeout(function() { callOpenerPreviousInfoList(); }, 1000);

virker ikke. Hverken med eller uden window.close.
Avatar billede Slettet bruger
28. april 2010 - 10:21 #9
Nu kender jeg jo ikke sammenhængen, men, var det en mulighed at sludre lidt med brugeren mens data falder på plads ?

function submitEditSignal() {
    document.forms[0].submit();
    alert("Klokken er mange, men dit signal er modtaget");
    callOpenerPreviousInfoList();
    window.close();
}

Alternativt: Flyt kaldet til callOpenerPreviousInfoList() til responset fra den submittede form...
Bonus: Hvis der sku' gå noget galt efter sumbit fra popup'en som det er nu, vil brugeren aldrig se det, da vinduet forlængst er lukket..)
- den situation vil du kunne fange hvis du venter på response får du farer videre.
Avatar billede majbom Novice
04. november 2010 - 13:37 #10
kom du videre?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester