Avatar billede thulstrup Nybegynder
17. januar 2003 - 14:42 Der er 14 kommentarer og
1 løsning

problem med en for løkke

_root.onLoad = function() {
  for (i=1; i<9; i++) {
    _root["menuPunkt"+i].onRelease = function() {
      kørTilbage("indhold"+i);
    };
  }
};

Jeg har 8 knapper med instancenavn menuPunkt1, menuPunkt2, menuPunkt3...osv
Knapperne skal når de bliver trykket kalde funktionen "kørTilbage" med variablen "indhold" svarende til deres nummer.
F.eks. knappen "menuPunkt3" kalder funktionen "kørTilbage" med variablen "indhold3".

Problemet er at alle knapperne får variablen "indhold9". Hvordan undgår jeg det?
Avatar billede barklund Nybegynder
17. januar 2003 - 15:05 #1
For det første giver _root.onLoad ingen mening - _root er jo loaded, når den kommer til din kode... Derudover skal du nok ikke have et "ø" i dine variabel-navne... Hold dig til "a-z"...

For at det enkelte movieclip, kan huske værdien af "i", så er du nødt til at gemme den lokalt i movieclippet, som:

for (i=1; i<9; i++) {
    _root["menuPunkt"+i].num = i;
    _root["menuPunkt"+i].onRelease = function() {
        koerTilbage("indhold"+this.num);
    };
}

/Barklund
Avatar billede thulstrup Nybegynder
17. januar 2003 - 15:42 #2
Super barklund!
jeg har rettet de fejl du påpegede og værdien af "i" passer også med knapperne nu. Tak for hjælpen og kom med et svar.
Avatar billede barklund Nybegynder
17. januar 2003 - 15:46 #3
Jo tak...
Avatar billede rapstam Nybegynder
17. januar 2003 - 15:50 #4
Barklund:
Hvad er der galt med æ,ø og å'er i variabelnavne?

>>Rapstam
Avatar billede thulstrup Nybegynder
17. januar 2003 - 15:53 #5
Lige et bonus spørgsmål:

_root["menuPunkt"+i].onRollOver = function() {
  _root.onEnterFrame = function() {
    _root["menuPunkt"+i].gotoAndStop(_root["menuPunkt"+i]._currentframe+1);
  };
};
_root["menuPunkt"+i].onRollOut = function() {
  _root.onEnterFrame = function() {
    _root["menuPunkt"+i].gotoAndStop(_root["menuPunkt"+i]._currentframe-1);
  };
};

hvordan får jeg så min rollOver/rollout til at virke?
Hvorfor
Avatar billede thulstrup Nybegynder
17. januar 2003 - 16:09 #6
jeg ville jo synes at:

_root["menuPunkt"+this.num].onRollOver = function() {
  _root.onEnterFrame = function() {
    _root["menuPunkt"+this.num].gotoAndStop(_root["menuPunkt"+this.num]._currentframe+1);
  };
};

burde virke, men det gør det bare ikke.
Avatar billede barklund Nybegynder
17. januar 2003 - 16:36 #7
>> cellb10ck

nejnejnej... Hvor er "this"? this er relativt til den indeholdende funktion. Og den inderste funktion er defineret i _root, hvor variablen "num" ikke findes... Den findes jo i movieclippet...

Men ideen er også forkert.. Når jeg laver en rollOver på et enkelt movieclip, så behøver man jo ikke definere enterFrame i _root til at animere det pågældende movieclip... Denne kan blot animeres på det pågældende... :o)

_root["menuPunkt"+i].onRollOver = function() {
  this.onEnterFrame = this.nextFrame;
}
_root["menuPunkt"+i].onRollOut = function() {
  this.onEnterFrame = this.prevFrame;
}

En lille frækt hack dér... :o)

Det kunne skrives:

this.onEnterFrame = function() { this.nextFrame(); };

Men det andet ser frækkere ud og har samme effekt...

>> rapstam

Man kan da ikke lave en variabel, der indeholder "æ", "ø" eller "å" i sit navn... Min flash brokker sig i hvert fald hvis jeg skriver:

voresHåb = "Ingen krig";

Men det er måske bare mig :o)

/Barklund
Avatar billede barklund Nybegynder
17. januar 2003 - 16:36 #8
Og tark for point :o)
Avatar billede thulstrup Nybegynder
17. januar 2003 - 16:48 #9
Tak igen barklund, jeg var da vist helt galt på den der :-(

Min flash kan godt klare æ-ø-å. Der er ingen fejl hvis jeg skriver:
voresHåb = "Ingen krig";
Avatar billede thulstrup Nybegynder
17. januar 2003 - 18:13 #10
Nu fatter jeg ingenting. Jeg loader filmen med det ovenståene script ind i et tomt movieclip "indhold" i min hovedfilm. Burde det så ikke være nok at ændre stien fra _root til _root.indhold? Det virker bare ikke

_root.indhold["menuPunkt"+i].onRollOver = function() {
  this.onEnterFrame = this.nextFrame;
}
_root.indhold["menuPunkt"+i].onRollOut = function() {
  this.onEnterFrame = this.prevFrame;
}
Avatar billede barklund Nybegynder
17. januar 2003 - 18:24 #11
hvis scriptet står i den movie, som du loader ind, og movieclips'ne "menuPunktX" ligger direkte i dette, så kan du bare bruge "this":

this["menuPunkt"+i].onRollOver = function() {
  this.onEnterFrame = this.nextFrame;
}
this["menuPunkt"+i].onRollOut = function() {
  this.onEnterFrame = this.prevFrame;
}
Avatar billede barklund Nybegynder
17. januar 2003 - 18:25 #12
Og flash5 kan ikke lide åøæ i variabelnavne... Og du kan bestemt ikke være sikker på, at alle flash6-playeren eksekverer ordentlig, hvis du bruger dette...
Avatar billede thulstrup Nybegynder
17. januar 2003 - 19:12 #13
Det virker hvis jeg skriver:

onClipEvent(load){
  _root.indhold.menuPunkt1.bar.stop();
}

men ikke hvis jeg skriver:

onLoad = function () {
  for (i=1; i<2; i++) {
    _root.indhold["menupunkt"+i].bar.stop();
  }
}

Hvad er forskellen og hvordan fikser jeg det?
Avatar billede barklund Nybegynder
17. januar 2003 - 19:44 #14
Du kan jo ikke i en frame skrive this.onLoad - for når dit script kører, så er den jo allerede loaded...

Derfor skal du bare skrive scriptet, som du ellers ville have puttet ind i din onLoad direkte i framen...
Avatar billede thulstrup Nybegynder
18. januar 2003 - 13:14 #15
Ja, så var den der! Tak igen :-)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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