Avatar billede jebzki Nybegynder
01. november 2007 - 14:32 Der er 13 kommentarer og
1 løsning

Javascript setTimeout, array - tror js har en bug.

Hej.
Jeg sidder og er igang med et lille online spil, som skal opdaterer nogle brugere.

Hvis brugeren ikke har været 'aktiv' i 6000 sekunder, skal den slette elementet (div)

Men er der nogle der kan sige mig, hvorfor - denne kode - ikke vil som jeg?

Når jeg laver en funktion som står og reloader hele tiden, så gør den ikke som jeg vil.

Prøv kør dette eksempel og se hvad jeg mener.

Skulle den ikke opdaterer "setTimeout" med en ny værdi?? Den springer bare til funktionen "deleteObject", selvom jeg opdaterer det nye setTimeout tal?

-- Forstår i? Prøv kig her


<script type="text/javascript">

var userTimeout = new Array();
var userTimes  = new Array();

function DeleteObject ( id )
{
    alert("slet " + id);
}

function ReloadUsers ( id )
{
    userTimes[id]  = 6000;
    userTimeout[id] = setTimeout("DeleteObject("+id+")",userTimes[id]);
}


setInterval("ReloadUsers(89)",2500);
setInterval("ReloadUsers(81)",2200);

</script>
Avatar billede olebole Juniormester
01. november 2007 - 14:46 #1
<ole>

Det fungerer da helt som forventet. Hvad forventer du? Jeg forstår ikke dit problem  :)

/mvh
</bole>
Avatar billede jebzki Nybegynder
01. november 2007 - 14:50 #2
At når funktionen "reloadUsers" opdateres, skal userTimeout[id] få en ny værdi i setTimeout på 6000 igen. Men den kalder jo "DeleteObject()" i min kode, hver gang jeg giver userTimeout[id] en ny værdi - og det er jo ikke muligt, hvis du kigger på koden? (altså tror javascript er galt på den).. men ja.. kan du følge mig?
Avatar billede jebzki Nybegynder
01. november 2007 - 14:52 #3
Hver gang den opdaterer, sætter den jo en ny værdi på:

userTimeout[id] = setTimeout("DeleteObject("+id+")",userTimes[id]);

Det vil sige, den faktisk ikke skal kalde DeleteObject() funktionen, før 6000 er udløbet.. Og det gør den jo ikke, når den opdaterer "ReloadUsers()" hver gang??
Avatar billede jebzki Nybegynder
01. november 2007 - 14:56 #4
Her udskriver den dette (selvom jeg har reload til 1000 og 2000 sekunder) og timeout til at slette objektet på 6000..


Saetter ny vaerdi paa userTimeout (6000)
Saetter ny vaerdi paa userTimeout (6000)
Saetter ny vaerdi paa userTimeout (6000)
Saetter ny vaerdi paa userTimeout (6000)
Saetter ny vaerdi paa userTimeout (6000)
Saetter ny vaerdi paa userTimeout (6000)
Saetter ny vaerdi paa userTimeout (6000)
Saetter ny vaerdi paa userTimeout (6000)
Saetter ny vaerdi paa userTimeout (6000)
vil slette 89
Saetter ny vaerdi paa userTimeout (6000)
Saetter ny vaerdi paa userTimeout (6000)
Saetter ny vaerdi paa userTimeout (6000)
vil slette 89
vil slette 81
vil slette 89
vil slette 81
Avatar billede olebole Juniormester
01. november 2007 - 15:07 #5
Jeg forstår stadig ikke, hvad du vil
Avatar billede jebzki Nybegynder
01. november 2007 - 15:22 #6
Hver gang den opdaterer "ReloadUsers()" skal den opdaterer arrayet userTimeout[id] med setTimeout(....) i, til 6000..???

Kig på eksemplet så ville du sagtens kunne forstå hvad der er galt..

--->
Den skal jo netop IKKE slette noget som helst, da den hele tiden sætter 6000 i setTimeout på mit array.. Kan du ikke se det er javascript der er galt med??
Avatar billede olebole Juniormester
01. november 2007 - 15:27 #7
Nej, koden gør præcist, som den skal. Til gengæld har jeg på fornemmelsen, du forventer dig noget, der ikke er meningen med JavaScript. Måske er det også derfor, du tror, vi andre sagtens kan forstå, hvad du mener - selvom det f.eks. for mig er helt sort, hvad du mener  :)
Avatar billede jebzki Nybegynder
01. november 2007 - 15:34 #8
Det da ikke sort;
Jeg opdaterer hver gang en ny værdi i setTimeout til 6000.. Det vil sige den ALDRIG vil komme til at slette noget som helst, da den hele tiden opdaterer 6000 i arrayet..

Det er ikke sort..
Avatar billede olebole Juniormester
01. november 2007 - 15:35 #9
- nå!
Avatar billede olebole Juniormester
01. november 2007 - 15:37 #10
Du kalder jo konstant 'DeleteObject', så jeg forstår ikke, det kommer bag på dig, den fuktion afvikles
Avatar billede jebzki Nybegynder
01. november 2007 - 15:39 #11
Jo, for arrayet bliver overskrevet hele tiden med setTimeout på 6000, så den vil aldrig kalde funktionen.. kan du ikke se det?
Avatar billede olebole Juniormester
01. november 2007 - 15:41 #12
Nej, det kan jeg ved Gud ikke se. Der må være noget, du misforstår ... jeg er bare ikke helt sikker på, hvad det er  :)
Avatar billede jebzki Nybegynder
01. november 2007 - 15:43 #13
Du kan da se, at det Array jeg kalder, bliver overskrevet hver gang med en NY setTimeout - dvs. den gamle SetTimeout bliver overskrevet - apopros vil DelteObject slet ikke blive kaldt?
Avatar billede jebzki Nybegynder
01. november 2007 - 15:52 #14
Nåh, lukker.
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