Dieter Raber: Objekt erwartet

Beitrag lesen

Hallo Jimmy,

Ich habe mir mal erlaubt, ein bisschen mit deinem Code zu spielen und finde, dass du wahnsinning viel Aufwand betreibst, um ans Ziel zu kommen.

src = document.getElementById("menu_sub_pic_" + nr).src;

du arbeitest hier mit 'nr', mit 'this' haettest du fast eine direkt Referenz auf das Bild. Schluesselwort 'var' fehlt

ext = src.substring(len,len-3);

Was ist bei Extension laenger als 3 Zeichen (auch wenn die in deinem Beispiel nicht vorkommen)

strArr = src.split(".");

Diese ganze Zerlegen und Zusammenbauen koenntest du mit einem replace loesen, da dir die Endung ohnehin bekannt ist. Im Endeffekt machst du ja nur aus 'foo.jpg' ein 'foogross.jpg'

document.getElementById("menu_sub_pic_link_" + nr).class = "menupic active";

Mit 'this' waere das einfacher

Das Ergebnis saehe dann so aus:

  
<a id="menu_sub_pic_link_1" onclick="showMainPic(this);" class="menupic active">  
<!-- hier auf das Argument achten__________________^ -->  

----------------------

  
function showMainPic(sender) {   // sender ist das 'this' aus dem Link, also eine direkte Referenz darauf  
  
  var pic = sender.getElementsByTagName('img')[0];     // hier ist dein Bild, die Id brauchst du nicht mehr  
  var len = pic.src.length;  
  var ext = pic.src.substring(pic.src.lastIndexOf('.') + 1, len);          // funktioniert auch mit laengeren Endungen  
  var clr = pic.src.substring(len, len - 9) == 'clear.gif' ? true : false;   // dann ist das auch schon mal geklaert  
  
  if((ext == 'jpg' || ext == 'gif' || ext == 'png') && !clr) {  
    document.getElementById("mainpic").src = pic.src.replace('.' + ext, 'gross.' + ext); // ist doch simpler, oder?  
  }  
  
  sender.className = "menupic active"; // In Javascript muss es className heissen, auch hier wieder Referenz auf den Link  
}  

</body>
</html>
Gruß,

Dieter