vweed: Bild auf Vorhandensein prüfen

Hallo Ihr Profis,

ich versuche gerade eine Abfrage zu schreiben, die prüft, ob bestimmte Bilder, von welchen der Name bekannt ist, auch auf dem Server vorhanden sind.

Aufgabe: In einer For-Next-Schleife wird ein Dokument mit Bildern geprüft, die in dem Dokument vorhanden sind, aber durch jeweils ein grösseres mit ähnlichem Namen ersetzt werden sollen, sofern dieses grössere Bild auf dem Server existiert.

Habe hierzu das Beispiel von JStruebig verwendet und entsprechend abgeändert.

normale Bilder heissen "bild01_640.jpg"
grosse (und nicht immer vorhandene) Bilder heissen "bild01_800.jpg"
wobei das "01" (bis "99") ein laufender Zähler für die Bilder ist.

Bin derzeit soweit:

  
 // Schleife  
 for (var i = 0; i < document.images.length; i++)  
 {  
  // Bilder nacheinander auslesen und in Array schreiben  
  picadr[i] = (document.images[i].src);  
  // grösseres Bild in var testBild kopieren  
  var testBild = picadr[i].substring(0,6) + "800" + picadr[i].substring(10,picadr[i].length)  
  // neues Bild anlegen  
  var img = new Image()  
  // Bildquelle = grosses Bild  
  img.src = testBild  
  // wenn grosses Bild nicht vorhanden, dann var testBild = kleines Bild  
  img.onerror = function () {testBild = picadr[i]}  
  picadr[i] = testBild  
 }  

Das haut aber nicht hin.
Was mache ich falsch?
Wäre sehr nett, wenn mir einer von Euch helfen könnte.
Suche schon den ganzen Mittag lang nach einer Lösung.

herzliche Grüsse und einen schönen 4. Advent

  1. Hallo vweed,

    img.onerror = function () {testBild = picadr[i]}

    der Eventhandler wird erst aufgerufen, wenn das Ereignis eintritt, nicht sofort.

    picadr[i] = testBild

    zu diesem Zeitpunkt ist die Handlerfunktion noch nicht gelaufen.

    Gruß, Jürgen

    1. Hallo Jürgen,
      aha, besten Dank für die Info.
      Nachdem JS nicht zu meinen Leib- und Magen-Sprachen gehört, wie kann ich das Problem denn umschiffen, so dass es funktioniert?
      Beste Grüsse
      Vero

      1. Hallo Ihr,

        habe das Problem elegant auf Frauenweise - also durchs Hintertürchen beseitigt.

        Nachdem ich feststellte, dass die kleinen Bilder in einem anderen Unterverzeichnis liegen, wenn zu diesen auch ein grosses Ebenbild existiert, als die kleinen Bilder ohne grosses Equivalent, brauchte ich nur noch den Bilderpfad zu checken, um festzustellen, ob ein kleines Bild einen grossen Bruder hat oder nicht.

        Problem gelöst - jetzt funktioniert die Sache.

        Besten Dank für die Unterstützung - aber mit ein, zwei Stichworten ist es bei mir leider bei JS nicht getan. Bin eigentlich VB-Coder.
        JS-Kenntnisse sind nur rudimentär vorhanden.
        Bin aber sehr lernwillig

        Beste Grüsse

        Veronika

  2. Mach mal ; hinter die ganzen Zeilen. Ich weiß zwar nicht mal ob die in JS zwingend sind, aber wenn die fehlen könnte das auch schon einiges Kopfzerbrechen machen.

    1. @@Encoder:

      nuqneH

      Mach mal ; hinter die ganzen Zeilen.

      Hinter for (var i = 0; i < document.images.length; i++) aber nicht! Hinter } auch nicht.

      Ich weiß zwar nicht mal ob die in JS zwingend sind

      Nein, sind sie nicht. Sie sollten aber dennoch gesetzt werden.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)