setInterval() aktiverer en funktion igen og igen efter et givent antal millisekunder. setTimeout aktiverer en funktion én gang efter et givent antal millisekunder - altså en forsinkelse.
*GG* - er gået i gang med nogle fingre-opvarmningsøvelser. ;-)
I grunden så tror jeg folk bliver forvirrede over forskellen på grund af den måde man bruger de to forskellige metoder på. For eksempel eksekveres denne funktion én gang i sekundet: function foo() { window.status = new Date(); window.setTimeout('foo();',1000); } Det er dog imidlertidig bare fordi funktionen hele tiden bliver udført med en forsinkelse på et sekund hver gang funktionen når til sin ende.
du har helt ret skovenborg :o), de ligger meget op af hinanden de funktioner, da man uden problemer kan få dem til at agere ens, men alt efter behovet, så er setInterval klart smartest hvis noget skal udføres mange gange :o)
jep, men man skal passe lidt på alligevel. Hvis du skriver: function foo() { window.status = new Date(); timer = window.setInterval('foo();',1000); } så bliver det noget rod - (i dette tilfælde kan det godt være man ikke kan se forskel, men rent faktisk begynder funktionen at køre igen og igen - med mindre og mindre tidsmellemrum). Alternativet her er at skriver: function foo() { window.status = new Date(); } timer = window.setInterval('foo();',1000);
setInterval() og setTimeout() giver nemlig helt andre resultater når de først kaldes inde i selve funktionen i forhold til andre steder på siden.
jo vent - man kan godt se en forskel. function foo() { window.status = new Date(); timer = window.setInterval('foo();',1000); } Denne funktion fik min browser til at gå ned - nogenlunde samme virkning som et infinity loop.
Ville nu heller aldrig køre en Timeout, eller Interval inde fra en funktion uden at have clearet det eksisterende indhold inden, og du har ret, på et eller andet sted burde ovenstående give overflow :o)
men prøv:
function foo() { window.status = new Date(); clearInterval(timer) timer = window.setInterval('foo();',1000); }
Ok, i får 5 p hver. kan man også aktivere flere funktioner med setInterval(): a = 0; window.setInterval("if(a++ == 5)foo()", 1000); // Aktiverer foo() 5 gange
du skal hellere gøre sådan her: var a = 0; var timer; function foo() {
window.status = a; // Eller hvordan din funktion nu ser ud if (a++ >= 5) window.clearInterval(timer); } timer = window.setInterval("foo();",1000);
Du kan nemlig ikke gøre det på den anden måde, da javascript-parseren (den der læser scriptet) kun kommmer forbi window.setInterval("if(a++ <= 5)foo()", 1000); én gang - og derfor tester den jo også kun én gang. Så du kan ikke umiddelbart gøre det på den måde. Du kunne også bare gøre sådan her: var a = 0; function foo() {
alert(a); if (++a <= 5) window.setTimeout("foo();",1000); } foo();
Ok, tak for den oplysing, hvilket jeg i øvrigt rigtig godt kan bruge, men det var ikke svar på mit spørgsmål. Nå, lige meget. Hvis Grunken nu lige smider et svar, så accepterer jeg...
hmm, rent faktisk virker: a = 0; window.setInterval("if(a++ <= 5)foo()", 1000); for mig - ud over at du skal skrive if(++a <= 5) eller if(a++ < 5) i stedet hvis du skal udføre den 5 gange. Så jeg tog faktisk fejl med min tidligere påstand ;-) Hvis det ikke virker så er det måske mere noget med din funktion du kalder. Prøv fx at skrive: function foo() { alert("FOO"); } a = 0; window.setInterval("if(a++ <= 5)foo()", 1000); Det virker fint nok :-)
*LOL* - ja, man bliver jo påvirket af den mand. Godt man ikke kan tage patent på sådan noget ;-) Så nu når jeg er i gang kan jeg ligeså godt afslutte på ægte roenvingvis:
-- velbekomme '-)
Synes godt om
Ny brugerNybegynder
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.