Avatar billede sholm Nybegynder
08. november 2007 - 21:59 Der er 9 kommentarer og
2 løsninger

Spot fejlen i cache/udskiftbillede

Hej

Jeg har en menu, hvor jeg gerne vil have erstattet nogle billeder ved onmouseover og onmouseout.

Jeg har følgende javascript funktioner:
<script language="javascript" type="text/javascript">
var pics = new Array();
pics[0] = "m1.gif";
pics[1] = "m2.gif";
pics[2] = "m3.gif";
pics[3] = "m4.gif";
pics[4] = "m5.gif";
pics[5] = "m6.gif";
pics[6] = "m7.gif";
for ( i=0; i<pics.length; i++ ) {
  var im = new Image();
  im.src = "images/menu/off/" + pics[i];
}
function switchImage(imgName, imgSrc) {
  if (document.images) {
    if (imgSrc != "none") {
      document.images[imgName].src = imgSrc;
    }
  }
}
</script>

og her kører jeg dem:
<a href="index.html" onmouseover="switchImage('m1','images/menu/off/m1.gif')" onmouseout="switchImage('m1','images/menu/m1.gif')"><img alt="" id="m1" name="m1" src="images/menu/m1.gif"></a>

Jeg får flere fejl f.eks.:
- Id var ventet i denne linje:document.images[imgName].src = imgSrc;
- Et objekt var ventet i linjen: <a href="index.html" onmouseover="switchImage('m1','images/menu/off/m1.gif')" onmouseout="switchImage('m1','images/menu/m1.gif')"><img alt="" id="m1" name="m1" src="images/menu/m1.gif"></a>

Nogle ideer?
Avatar billede w13 Novice
08. november 2007 - 23:27 #1
Første fejl:
document.images[imgName].src = imgSrc;
skal rettes til:
document.getElementById(imgName).setAttribute("src",imgSrc);

images[] er nemlig at array, så du kan ikke bruge id'et her, kun tal.

Ret hele funktionen switchImage() til:

function switchImage(imgName,imgSrc) {
  if(imgSrc) document.getElementById(imgName).setAttribute("src",imgSrc);
}

Så må vi se på den anden fejl bagefter, hvis den stadig er der.
Avatar billede roenving Novice
09. november 2007 - 02:01 #2
images[] er ikke et array, men en collection, så det går ganske udmærket at bruge navn, men selvfølgelig ikke i xhtml ...

-- at det så ikke er fremtidssikret at bruge collections er så en anden sag (de er deprecated i xhtml 1.0 transitional og ugyldige i xhtml strict og 1.1+ !-)

-- og dette gælder iøvrigt alle collections, bla. formObjekt.elements (vist kun deprecated i strict og 1.1 !-), hvorfor vi kraftigt mangler XForms, så en ordentlig behandling af formularer kan ramme xhtml også ...

-- men når du alligevel også angiver et id, er det eddermaneme smart at benytte w13s metode, da den præcis er xhtml-kompatibel (og så kan du roligt fjerne name-attributten på img-tags, som heller ikke kan valideres til xhtml !o]

-- og det virker ulogisk at spørge på, om imgSrc indeholder teksten "none", for så undgår man vel at sætte kaldet ?-)
Avatar billede w13 Novice
09. november 2007 - 02:06 #3
Ja ok.. Collection så.. :P

Og ja, brug funktionen:

function switchImage(imgName,imgSrc) {
  document.getElementById(imgName).setAttribute("src",imgSrc);
}

i stedet.
Avatar billede sholm Nybegynder
09. november 2007 - 09:40 #4
Tak for hjælpen, nu virker det som det skal.

Jeg har udskiftet funktionen switchImage til w13s forslag og fjernet name fra img-tags.

Kom endelig med nogle svar.
Avatar billede w13 Novice
09. november 2007 - 15:05 #5
Svar. :)
Avatar billede sholm Nybegynder
15. november 2007 - 10:18 #6
Skal vi gi' roenving et par dage mere til at svare? :)
Avatar billede w13 Novice
15. november 2007 - 13:49 #7
Ja, han får lige chancen. =)
Avatar billede roenving Novice
15. november 2007 - 14:24 #8
Oki '-)
Avatar billede sholm Nybegynder
15. november 2007 - 14:30 #9
Endnu engang tak for hjælpen.
Avatar billede w13 Novice
15. november 2007 - 14:30 #10
Og tak for point! :)
Avatar billede roenving Novice
15. november 2007 - 23:45 #11
Også jeg takker for point ;~}
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