Thrillseeker: Loop mit onError arbeitet nicht richtig

Hallo,

ich bin jetzt langsam am verzweifeln. sitze nun schon den ganzen abend an diesem verflixten script für eine dynamische bildergalerie und alles ist soweit gut, nur diese eine schleife will einfach nicht so richtig.

ich poste hier einfach mal den quellcode, die betroffene stelle ist mit ####### markiert.

zum verständniss, der zähler läuft rückwärts von 20 weil je galerie max. 20 bilder vorhanden sein können/sollen. mit onError soll geprüft werden welche bilder nicht da sind weil nicht jede galerie volle 20 bilder enthält.

einen dank im vorraus allen die sich die mühe machen den code zu lesen!

mfg thrillseeker

----------------- code ---------------------

<html>
<head>
<title>.::[ My T4 Style ]::.</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script language="JavaScript" type="text/javascript">
<!--
 var galNumber = location.search.substring(1,location.search.length);
 var picCounter = 20;
 var imgFile = new Image();
 var linksGenerated = 001;
 var docTitle = "<H1 align="center"><font face="Arial, Helvetica, sans-serif">..:: Galerie " + galNumber + "::..</font></H1>";
 var preLinks = "<P align="center"><font face="Arial, Helvetica, sans-serif" size="-1"><B>Bilder: </B>";
 var linkTag = "<a href="javascript:changeBigPic('" + linksGenerated + "')">" + linksGenerated + "</a>";
 var linkLinecode = "";
 var postLinks = "</font></p>";
 var imgCode = "<p align="center"><img id="bigpic" border="0" src="./bilder/' + galNumber + '/001.jpg" width="352" height="288"></p>";
 var footer = "<P align="center"><font face="Arial, Helvetica, sans-serif" size="-1"><a href="galindex.htm" target="mainFrame">[Zurück zur &Uuml;bersicht]</a> | <a href="start.htm" target="mainFrame">[Zurück zur Startseite]</a>";

function galeryGen() {
 document.all.tags("body")[0].innerHTML = docTitle + "<P align="center">Lade Galerie...</P><p align="left">Variablenwerte:<br>galNumber= " + galNumber + "<br>picCounter= " + picCounter + "<br>file= " + imgFile + "<br>linksGenerated= " + linksGenerated;
 countImages();
}

// #################################################################
function countImages() {
 if(picCounter >= 10) imgFile.src = "./bilder/" + galNumber + "/0" + picCounter + ".jpg";
 if(picCounter <= 9) imgFile.src = "./bilder/" + galNumber + "/00" + picCounter + ".jpg";
 alert("picCounter= " + picCounter);
 picCounter = picCounter--;
 imgFile.src.onError = countImages();
 writeLink('picCounter');
}
// ##################################################################

function writeLink(lastPic) {
 linkLinecode = linkLinecode + linkTag;
 if(linksGenerated = lastPic) writeTags();
 linkLinecode = linkLinecode + "" | "";
 linksGenerated = linksGenerated++;
 writeLink();
}

function writeTags() {
 var documentHTML = docTitle + preLinks + linkLinecode + postLinks + imgCode + footer;
 document.all.tags("body")[0].innerHTML = documentHTML;
}

function changeBigPic(nr) {
if(nr <= 9) document.images[0].src = "./bilder/" + galNumber + "/00" + nr + ".jpg";
if(nr >= 10) document.images[0].src = "./bilder/" + galNumber + "/0" + nr + ".jpg";
}
-->
</script>
</head>
<body bgcolor="#66CCFF" text="#666666" onLoad="galeryGen();">
<P> </P>
</body>
</html>

------------------ code ende ------------------

  1. Dein code ist ziemlich unübersichtlich, aber ich habe trotzdem die Stelle gefunden:

    imgFile.src.onError = countImages();

    Was macht das deiner Meinung nach?

    Du willst, das wenn der Event 'onerror' eintritt die Funktion countImages aufgerufen wird.
    Du weist aber dem Event den Rückgabewert der Funktion zu. Mach die Klammern weg, dann wird die Referenz auf die Funktion dem event zugewiesen.

    zum Verständniss:

    alert( countImages() )
    alert( countImages )

    alert( typeof countImages() )
    alert( typeof countImages )

    Struppi.

    1. Danke Struppi,

      das hab ich scheinbar übersehen/missverstanden.

      das hab ich nun also korrigiert, erhalte nun aber vom IE nach dem ersten durchlauf der schleife die meldung: stackoverflow at line 39

      allerdings habe ich mir mittlerweile überlegt, dass es ja viel einfacher wäre, beim aufruf der galerie nicht nur die galerienummer zu übergeben, sondern auch gleich die anzahl der bilder um dann die links mit einer schleife zu generieren.
      (ich bin darauf gekommen, weil die anzahl der bilder innerhalb einer galerie sich nicht weiter ändert, es sei denn, ich füge bilder hinzu oder entferne welche. daher ist mir dieser wert ja bekannt und ich kann ihn beim verlinken direkt mit eingeben, dadurch wird dann ja die prüfroutine vollkommen überflüssig und die seite wird schneller aufgebaut.

      for(i<numberOfPics) ....

      nun frage ich mich aber wie ich zwei parameter mit der URL übergeben kann.

      zur zeit geschieht der aufruf folgendermassen:

      galerycontrol.htm?###

      wobei ### die 3-stellige galerienummer darstellt und durch folgende zeile ausgelesen wird:

      var galNumber = location.search.substring(1,location.search.length);

      ich überlege gerade wie die "neue" URL möglicherweise aussehen könnte:

      galerycontrol.htm?###XX

      var galNumber = location.search.substring(1,location.search.length,2);
      var numberOfPics = location.search.substring(4,location.search.length);

      wenn das so funktionieren kann, bräuchte ich das verflixte zählermodul nicht mehr und könnte ohne umwege direkt den content samt linkzeile (via schleife) erzeugen.

      ich versuchs jetzt einfach mal, werd mir vorher aber noch for und while angucken und überlegen welches, meiner meinung nach, besser geeignet ist.

      1. Hallo Struppi und alle anderen die evtl. mitgelesen haben.

        also manchmal dauerts einfach länger bis der euro in form von cent-stücken seinen weg nach unten findet ;o)

        folgendermassen habe ich das nun gelöst:

        <html>
        <head>
        <title>.::[ My T4 Style ]::.</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

        <script language="JavaScript" type="text/javascript">
        <!--
         var galNumber = location.search.substring(1,4);
         var numberOfPics = location.search.substring(4,6);
         var links = 1;
         var imgCode = "<p align="center"><img id="bigpic" border="0" src="./bilder/" + galNumber + "/001.jpg" width="352" height="288"></p>";
         var footer = "<P align="center"><font face="Arial, Helvetica, sans-serif" size="-1"><a href="galindex.htm" target="mainFrame">[Zurück zur &Uuml;bersicht]</a> | <a href="start.htm" target="mainFrame">[Zurück zur Startseite]</a>";

        // bildwechselsteuerung
        function changeBigPic(nr) {
         document.images[0].src = "./bilder/" + galNumber + "/" + nr + ".jpg";
        }

        -->
        </script>
        </head>
        <body bgcolor="#66CCFF" text="#666666">
        <script language="JavaScript" type="text/javascript">
        <!--
        // generiere kopf
        document.writeln("<H1 align="center"><font face="Arial, Helvetica, sans-serif">..:: Galerie " + galNumber + "::..</font></H1>");
        document.write("<P align="center"><font face="Arial, Helvetica, sans-serif" size="-1"><B>Bilder: </B>");

        // generiere links in die aktuelle zeile
         // ersten link
         document.write("<a href="javascript:changeBigPic('001')">01</a>");

        // übrige links
         do {
          links = links + 1;
          var code = ((links < 10) ? "00" : "0" ) + links;
          var text = ((links < 10) ? "0" : "" ) + links;
          document.write(" | <a href="javascript:changeBigPic('" + code + "')">" + text + "</a>");
          }
         while( links < numberOfPics );
        document.writeln("</font></p>");

        // generiere bild und footer
        document.writeln(imgCode);
        document.writeln(footer);
        -->
        </script>
        </body>
        </html>

        ich werde das gleich in die homepage einbauen, dann kann ja wer lust hat sich das mal angucken und eventuelle bugs mir per email mitteilen!

        Vielen Dank an Struppi für unermüdliche blindenhilfe =Bo)
        und auf jedenfall ein riesen dankeschön an die macher von selfhtml ohne deren werk ich HTML immernoch für ein kunststoffprodukt halten würde *laughs*

        Gruß Thrillseeker