Avatar billede tdaugaard Nybegynder
05. januar 2001 - 12:07 Der er 10 kommentarer og
1 løsning

IsObject !?

Findes der en funktion der kan \"fortælle\" mig om f.eks.

document.menuImg99 er et gyldigt object på min side ? Jeg har et loop der løber document.menuImg# igennem og eval()\'er det. Men da antallet af objekter kan variere fra et kald til et andet så ville det være lækkert med noget der kunne checke såjeg kunne skrive f.eks.

for (var index=1;index<=8;index++) {

of hvis den så nåede til #5 og den ikke fandtes ville den break\'e ud.
Avatar billede jumper Nybegynder
05. januar 2001 - 12:11 #1
Du har ikke brug for eval() til dynamiske objekt referencer, du kan bruge array notation:

for (var index=1; index<=8; index++){
  if (document[\"menuImg\" + index]){ // Hvis f.eks. menuImg5 findes
    // Så gør noget med den
  }
}

/Thor
Avatar billede tdaugaard Nybegynder
05. januar 2001 - 12:16 #2
jumper:> normalt er jeg ligeglad, men det skal virke i NS 4+. Nedenfor er hele min kode i den funktion (activeIndex=0; i toppen af js. fil så den er fin nok)

for (var index=1;index<=5;index++) {
    if (index==activeIndex) onoff=\"hpil.gif\" else onoff=\"pil0.gif\";

    if (n)
        lay=\"document.menuLayer\"+index+\".document.images.menuImg\"+index+\".src=\'picts/\"+onoff+\"\';\"
    else
        lay=\"document.menuImg\"+index+\".src=\'picts/\"+onoff+\"\';\"
               
    eval(lay);
}

der kan du bl.a. se hvorfor jeg bruger eval().

PS. Jeg er INGEN mester i JS så det kan sikkert godt være at det kunne laves bedre ;-)
Avatar billede jumper Nybegynder
05. januar 2001 - 12:30 #3
tdaugaard, array notation virker også fint i NS4+, det har været en del af grund-sproget siden Netscape 2.0 (p.g.a. associative arrays) ;)

Du har ihvertfald ikke brug for eval. En måde at lave det på kunne være:

for (var index=1, onoff, dEl; index<=5; index++){
  onoff = (index==activeIndex) ? \"hpil.gif\" : \"pil0.gif\";
  dEl = document.layers ? document[\"menuLayer\" + index].document.images : document;
  dEl[\"menuImg\" + index].src = \"picts/\" + onoff;
}

/Thor
Avatar billede tdaugaard Nybegynder
05. januar 2001 - 12:35 #4
lignede jeg måske en der fattede hvad du havde skrevet *S* jeg prøver det lige (okay jeg fatter det godt ..)
Avatar billede tdaugaard Nybegynder
05. januar 2001 - 12:37 #5
Det virker .. dog ikke helt efter hensigten :-(

hvis jeg laver <=5 om til <=8 så den skulle løbe til 8, men breake hvis f.eks. nr. 5 ikke fandtes så får jeg en \"undefined er ikke et objekt\"
Avatar billede jumper Nybegynder
05. januar 2001 - 12:42 #6
Ahh okie, så ændrer vi bare lidt (jeg ændrede kun på den sidste kode du kom med :)

for (var index=1, onoff, dEl; index<=5; index++){
  onoff = (index==activeIndex) ? \"hpil.gif\" : \"pil0.gif\";
  dEl = document.layers ? document[\"menuLayer\" + index].document.images : document;
  if (dEl[\"menuImg\" + index]){ // Hvis f.eks. menuImg5 findes
    dEl[\"menuImg\" + index].src = \"picts/\" + onoff;
  } else {
    break; // Fjern break hvis den bare skal prøve alle
  }
}

/Thor
Avatar billede tdaugaard Nybegynder
05. januar 2001 - 12:45 #7
Der er bare nogle der kan det der, hva\' !? *S*
Jeg bukker og takker mange gange :-)
Avatar billede tdaugaard Nybegynder
05. januar 2001 - 13:04 #8
ehm... Netscape 4.7 var åben bart ikke enig i din påstand om at det også funkede i den ;-(

document[\"menuLayer\" + index] has no properties.

får jeg ..
Avatar billede tdaugaard Nybegynder
05. januar 2001 - 13:06 #9
det skal lige siges at menuLayer er et <div> layer, hvis det har nogen betydning.
Avatar billede jumper Nybegynder
05. januar 2001 - 13:09 #10
Doh! Jeg glemmer altid at teste i NS4 (er ved at være træt af den :). Nå pyt:

for (var index=1, onoff, dEl, d=document; index<=5; index++){
  onoff = (index==activeIndex) ? \"hpil.gif\" : \"pil0.gif\";
  dEl = d.layers && d[\"menuLayer\" + index] ? d[\"menuLayer\" + index].document.images : d;
  if (dEl[\"menuImg\" + index]){ // Hvis f.eks. menuImg5 findes
    dEl[\"menuImg\" + index].src = \"picts/\" + onoff;
  } else {
    break; // Fjern break hvis den bare skal prøve alle
  }
}

Var det bedre ? ;)

/Thor
Avatar billede tdaugaard Nybegynder
05. januar 2001 - 13:17 #11
*S* (ved at være ? - blev jeg allerede inden den kom! *G*)

nu gik NS ned, så jeg kan ikke lige teste,men jeg regner med det er ok .. du lyder som om du ved hvad du snakker om :-)
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