Avatar billede razmuz_dk Nybegynder
05. april 2006 - 00:50 Der er 12 kommentarer og
2 løsninger

Altid globale variabler i setTimeout?

Hejsa,

Jeg sidder her og bliver godt irriteret på setTimeout-funktionen. Så vidt jeg kan forstå så er alle variabler kaldt i en setTimeout globale variabler - også selv de bliver kørt fra hver sin funktion. Dette eksempel belyser hvad jeg er frustreret over:

function boing() {
    hephey = 'abc';
    setTimeout("alert(hephey)", 500);
}
function boing2() {
    hephey = 'def';
}
boing();
boing2();

Der vil komme et alert-vindue med teksten 'def'. hephey er ikke erklæret global og boing2()'s hephey-variabel bør derfor ikke påvirker den hephey der bliver kaldt og defineret i boing(). Det er hvert fald den tankegang jeg er vant til fra PHP.

Det synes jeg er yderst upraktisk? Skal jeg forstå det sådan at man bare ikke MÅ bruge (i dette tilfælde) hephey-variablen til andre ting mens setTimeout'en venter?

Jeg vil have lov til at definere en variabel et andet sted i koden uden at den påvirkes i min "ventende" setTimeout.

Eksempel: problemet opstår fx i min fader-funktion. Hvis flere elementer skal fades ud/ind på samme tid går der helt kage i det fordi variablen "opacity" påvirkes fra højre og venstre.

Jeg vil meget gerne høre nogle løsninger/alternativer.

På forhånd tak.
Avatar billede mclemens Nybegynder
05. april 2006 - 01:31 #1
Jeg kan godt forstå irritationen...
her er et eksempel hvor hephey er midlertidig...
- prøv at slette // foran første alert ... ok da
funktionen endnu ikke er slut eksisterer hephey stadig.
... prøv den næste med timeout... da funktionen er ovre
eksisterer hephey ikke længere og du får en fejl... om
der er en anden løsning på dit problem tør jeg ikke sige...

<script type="text/javascript">
<!--

function boing(hephey) {
hephey='abc';
// alert(hephey);
// setTimeout("alert(hephey)", 500);
}

function boing2(hephey) {
hephey='def';
}

boing();
boing2();

//-->
</script>
Avatar billede mclemens Nybegynder
05. april 2006 - 01:33 #2
... så hvis du vil bruge timeout set det ud til
at der ikke kan bruges midlertidige variabler ...
Avatar billede olebole Juniormester
05. april 2006 - 19:02 #3
<ole>

- joohhhh ... det kan der nu godt  :)

<script type="text/JavaScript">
function boing() {
    hephey = 'abc';
    setTimeout("alert('"+hephey+"')", 500);
}
function boing2() {
    hephey = 'def';
}
boing();
boing2();
</script>

/mvh
</bole>
Avatar billede olebole Juniormester
05. april 2006 - 19:04 #4
- men spørgsmålet understreger iøvrigt vigtigheden af altid at erklære lokale variabler med ordet 'var'. Dette giver således et helt andet resultat:

<script type="text/JavaScript">
function boing() {
    var hephey = 'abc';
    setTimeout("alert(hephey)", 500);
}
function boing2() {
    var hephey = 'def';
}
boing();
boing2();
</script>
Avatar billede mclemens Nybegynder
05. april 2006 - 19:07 #5
Nåh, ja ok så får du den til at poste indholdet som tekst ind i alerten med det samme istedet for først om et ½ sekund... genialt nok - det tænkte jeg ikke over :P
Avatar billede mclemens Nybegynder
05. april 2006 - 19:08 #6
(syntes lige den lignede min og kunne ikke forstå hvorfor den ene ville og den anden ikke indtil og så appostrofferne :D )
Avatar billede mclemens Nybegynder
05. april 2006 - 19:14 #7
og så = jeg så
Avatar billede olebole Juniormester
05. april 2006 - 23:03 #8
;o) ... du kan også - hvis du altså erklærer variablen med 'var' skrive:

<script type="text/JavaScript">
function boing() {
    var hephey = 'abc';
    setTimeout(function(){alert(hephey), 500);
}
function boing2() {
    hephey = 'def';
}
boing();
boing2();
</script>
Avatar billede olebole Juniormester
05. april 2006 - 23:05 #9
Ooooooops ... den 'Tuborg' havde jeg da vist selv drukket *LooL* ... sådan:
    setTimeout(function(){alert(hephey)}, 500);
Avatar billede razmuz_dk Nybegynder
09. april 2006 - 03:10 #10
Tak for hjælpen begge to .. smider i lige et svar? :)
Avatar billede mclemens Nybegynder
09. april 2006 - 10:13 #11
ok :)
Avatar billede olebole Juniormester
19. april 2006 - 21:28 #12
- sorry, jeg er her ikke så meget for tiden  =)
Avatar billede mclemens Nybegynder
20. april 2006 - 10:55 #13
- tak for point :)
Avatar billede olebole Juniormester
22. april 2006 - 16:43 #14
- og tak herfra også  ;o)
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