=?ISO-8859-15?Q?Birger_S=F8rensen?= <sdc@bbsorensen.com> writes:
> tinegade formulerede fredag:
>> Jeg vil gerne kunne sende en parameter med funktionskaldet i
>> timeout'en, f.eks. sådan:
>>
>> <snip>
>> var temp;
>> temp = 2;
>> testId = setTimeout('testfunc(temp)', 50); </snip>
>>
>> -men det har jeg ikke rigtigt held med, kan det ikke lade sig
>> gøre?
>>
>> /Tine
>
> setTimeout er en DOM ting, og defineret til at skulle have
> evt. parametre efter delayet.
Ikke i nogen standard-DOM.
> testid = setTimeout( func, delay, [parametre]);
> det virker bare ikke i IE ( iflg Mozilla doc. Jeg har testet...)
>
http://developer.mozilla.org/en/docs/DOM:window.setTimeout
Ja, det var oprindelig en Mozilla-specifik udvidelse, som både Opera
og Safari dog har efterlignet. Det virker stadig ikke i IE.
> Alternativet er som du selv prøver at udføre kaldet som en
> streng. Skulle vel umiddelbart være godt nok, men der er nok nogle
> problemer med at temp ikke bliver brugt som du forestiller dig.
> testId = setTimeout( 'testfunc('+temp+')', 50);
> skulle vist nok gøre det...
.... hvis "temp" lavet om til en streng og fortolket igen giver samme
værdi. Det gør det for tal og booleans, men ikke for, fx, strenge.
Eksempel
var temp = "2 + 2 = 4"; // evig sandhed
function func(x) { alert(x); }
setTimeout("func("+temp+")",1000); // sig sandheden ... "true"
> Denne løsning anbefales ikke af Mozilla.
Heller ikke af mig. Lad generelt være med at skrive kode i strenge,
det er noget rod, ligegyldigt om man bruger eval, Function eller
setTimeout til at udføre det.
> Ellers er der en mulighed for at gøre temp til en global variabel, og
> bruge den i testfunc().
(Unødendige) globale variable er også en dårlig ide.
> Mozilla anbefaler ikke at bruge streng løsningen, mens IE ikke kan
> overføre parametre ved pointer løsningen.
> Så umiddelbart er eneste rigtige mulighed, at bruge den globale
> variable.
> Eller een version til hver browser.
Eller bruge en funktion/closure til at gemme referencen til temp
til den skal bruges:
var temp;
temp = 2;
testId = setTimeout(function() { testfunc(temp); }, 50);
> Jeg ville nok bruge streng-løsningen på trods af Mozilla, hvis den
> virker.
"No, no, no. Quicker, easier, more seductive."
Det er vejen til the dark side :)
/L
--
Lasse Reichstein Nielsen
DHTML Death Colors: <URL:
http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'