Avatar billede jensgram Nybegynder
25. oktober 2001 - 15:49 Der er 23 kommentarer og
3 løsninger

sleep()?

Jeg har følgende:

    for (i=1;i<5;i++) {
        document.all[menunavn].style.backgroundColor = farver[i];
        vent_100_millisekunder()
    }

...men kunne godt lige tænke mig at vide, om JS ikke har en funktion som php\'s sleep()?

Jens Gram - www.jensgram.dk
Avatar billede nikolajdu Nybegynder
25. oktober 2001 - 15:53 #1
setTimeout(\'minFunktion()\',100)

100 milisekunder.
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 15:54 #2
function skiftfarve(i){
if (i<5){
document.all[menunavn].style.backgroundColor = farver[i];
}
setTimeout(\"skiftfarve(i+1)\",100)
}

kald:
skiftfarve(1)
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 15:55 #3
ups ... too slow
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 15:57 #4
desuden skal setTimeout() i mit eksempel nok ind mellem if-tuborg\'erne for at undgå den kører uendeligt
Avatar billede nikolajdu Nybegynder
25. oktober 2001 - 16:05 #5
fri-hash og så vil du nok lægge 1 til værdien af i 5 gange....

i++
Avatar billede jumper Nybegynder
25. oktober 2001 - 16:06 #6
setTimeout og setInterval er alt hvad du har, og alt hvad du har brug for i et event-styret host-miljø som browseren.

http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/setTimeout.asp

http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/setInterval.asp

WSH har derudover en Sleep method på WsShell objektet, hvilket du kan bruge udenfor browseren hvis du skal lave WSH scripts.

/Thor
Avatar billede jumper Nybegynder
25. oktober 2001 - 16:09 #7
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 16:10 #8
i++ og i+1 er det samme
Avatar billede nikolajdu Nybegynder
25. oktober 2001 - 16:11 #9
i+=1
Avatar billede nikolajdu Nybegynder
25. oktober 2001 - 16:12 #10
Fri Hash :-)

i = 5

i++; giver 6 første gang og 7 næste.
i+1; giver 6 første gang og 6 næste. Du lægger én til i, men i forbliver det samme.
i+=1 giver 6 første gang og 7 næste.
Avatar billede Slettet bruger
25. oktober 2001 - 16:15 #11
fri-hash>> Nej, for i første gennemløb vil \"i\" være 1 (hvis man bruger dit kald), og i andet og alle de uendeligt mange andre gennemløb vil \"i\" være 2. For du forøger jo ikke \"i\", du giver bare skiftfarve() en parameter, som altid vil være den samme!
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 16:15 #12
nej funktionen kaldes med 1 i sit kald,
1+1, dvs 2 i første timeout-kald,
2+1, dvs 3 i andet timeout-kald,
osv
Avatar billede nikolajdu Nybegynder
25. oktober 2001 - 16:18 #13
i++ forøger i med 1
i+=1 forøger lægger værdien 1 til værdien af i
i+1 lægger altid kun 1 til i, men i forbliver stadig det samme.
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 16:29 #14
hvis jeg skriver funktionsnavn(1); er det vel det samme som at skrive funktionsnavn(0+1);
og hvis parameteret får variabelnavnet i, vil i vel antage værdien der er angivet i kaldet - når funktionen kaldes med funktionsnavn(1+1) bliver variablen i altså til 2 og funktionsnavn(i+1) skulle blive parameteren 3, som så lægges i det variabelnavn parameteren har i funktionen, men bare glem diskussionen - i får ret, jeg får fred
Avatar billede Slettet bruger
25. oktober 2001 - 16:33 #15
OK: Variablen \"i\" ændres ikke af følgende:
i+1;
men tilgengæld af:
i++;
i+=1;
i=i+1;
Så dit script skal se sådan ud:

function skiftfarve(i){
if (i<5){
document.all[menunavn].style.backgroundColor = farver[i];
}
setTimeout(\"skiftfarve(\" + ++i + \")\",100)
}
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 16:37 #16
variablen skal ikke ændre værdi - funktionen kaldes på ny med en parameter som er 1 større
Avatar billede Slettet bruger
25. oktober 2001 - 16:42 #17
Ja, men \"1 større\" vil jo altid være det samme, da variablen ikke ændrer værdi! :-)
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 16:47 #18
ideen var at funktionen kaldes med skiftfarve(1+1) - så burde parametret(i) blive ... GLEM DET
Avatar billede jakoba Nybegynder
25. oktober 2001 - 19:14 #19
bare for at petitesse lidt.

variablen er lokal i funktionen så den behøver slet ikke ændre sig
men    setTimeout(\"skiftfarve(i+1)\",100)  dutter ikke for så står setTimeout 100 ms efter funktionen er afsluttet med en streng hvor der står  i (hvafforen i?).

så:
function skiftfarve(i){
    if (i<5){
      document.all[menunavn].style.backgroundColor = farver[i];
    }
    setTimeout(\"skiftfarve(\" +(i+1) +\")\",100); // i+1 skal udregnes her.
}

mvh JakobA
Avatar billede etrebla Nybegynder
25. oktober 2001 - 19:22 #20
ok, det vil sige det var lidt stremgmanipulation der skulle til - det lød på kommentarerne som om man ikke kunne lave rekursive funktionskald i javascript
Avatar billede etrebla Nybegynder
25. oktober 2001 - 19:24 #21
jeg har godtnok også siddet og rodet noget rundt med hasherens eksempel og ikke kunnet forstå det ikke virkede
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 20:01 #22
jakoba>> tak fordi du fik sat det på plads

alberte>> jeg er nu ikke hasher, mener bare det vil være gode kroner i statskassen :-) og ja det er netop inspireret af rekursion
Avatar billede etrebla Nybegynder
25. oktober 2001 - 20:04 #23
I know, sweetie :-))
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 20:05 #24
:-)
Avatar billede jakoba Nybegynder
25. oktober 2001 - 20:13 #25
bare for at petitesse lidt mere.

tankeganger er måske rekursiv, men det er decideret ikke rekursion, setTimeout returnerer med det samme efter at have hængt strengen på en taskliste mærket \'skal udføres om 100millisekunder\'.

tænk hellere på det som multitasking.

mvh JakobA
Avatar billede fri-hash Nybegynder
25. oktober 2001 - 20:17 #26
jeg skrev også \"inspireret af rekursion\", jeg ved godt at det ikke er en \'rigtig\' rekursiv funktion - jeg har programmeret rekursive funktioner i c++
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