Philipp Oettli: Zufall-OnMouseOver blockiert nach Error

hallo denn

Bei meinem Rollover wird durch Random() aus verschiedenen ein Bild ausgewählt. Manchmal gibt Random aber keinen Wert zurück, was einen Error ergibt. Dieser Error blockiert dann das Bild und es kann nicht mehr gewechselt werden.

Ist da ein Fehler drin oder gibt es eine Möglichkeit den Error abzufangen ?

Merci
Philipp

Quelltextausschnitt:
(Ganzer Code unter: http://clan.ch/phoe/dc/game3.html

// Bilder auflisten

var bildurl = new Array(
"space.gif",
"ca1.jpg",
"ca2.jpg",
"ca3.jpg")

// die Bilder laden

im = new Array();  
for (var i = 0; i < bildurl.length; i++)  
{  

im[i] = new Image();
  im[i].src = bildurl[i];
    }

// die Bilder wechseln

function Bildwechsel(Bildplatz,BildNr)
{
Bildplatz.src = im[BildNr].src;
}

</script>

</HEAD>

<BODY BGCOLOR=#c0c0c0 LINK=#800000 VLINK=#808000>

<TABLE BORDER = 0 CELLPADDING=0 CELLSPACING=0 ALIGN=CENTER WIDTH=600>
<TR>
  <TD ALIGN=CENTER><A HREF="javascript:check_n_go();"
    onMouseOver="Bildwechsel(a1,Math.round(Math.random() * bildurl.length));"><IMG NAME="a1" SRC="space.gif"
    WIDTH=150 HEIGHT=100 BORDER=0></A>

  1. Hallo Philipp

    Ist da ein Fehler drin oder gibt es eine Möglichkeit den Error abzufangen ?

    Einen Fehler kann ich eigentlich nicht erkennen. Aber vielleicht solltest Du mal probieren, der Funktion Bildwechsel beim Aufurf nur den Bildplatz als Parameter zu uebergeben und den random-Aufruf innerhalb dieser Funktion zu notieren. Es gibt zwar meines Erachtens keinen triftigen Grund dafuer, warum das sauberer waere, aber dass JavaScript-Interpreter nicht immer alles perfekt machen, was sprachlogisch moeglich ist, waere jedenfalls nichts Neues.

    viele Gruesse
      Stefan Muenz

    1. hallo Stefan

      »»Aber vielleicht solltest Du mal probieren, der Funktion Bildwechsel beim Aufurf nur den Bildplatz als Parameter zu uebergeben und den random-Aufruf innerhalb dieser Funktion zu notieren.

      Genau das hatte ich in meiner ersten Version. Weil es nicht klappte versuchte ich die obige Version, leider mit wenig Erfolg....

  2. Hallo Philipp,

    ich habe da einen Fehler entdeckt:

    var bildurl = new Array(

    »»  "space.gif",
    »»  "ca1.jpg",
    »»  "ca2.jpg",
    »»  "ca3.jpg")

    Hier wird ein Array mit 4! Elementen (d.h. bildurl.length=4 angelegt, die die Nummern 0-3 haben

    // die Bilder laden

    »»  im = new Array();
    »»  for (var i = 0; i < bildurl.length; i++)
    »»  {

    im[i] = new Image();
      im[i].src = bildurl[i];
        }

    Entsprechend sind hier auch nur im[0] bis im[3] (und nicht 4) definiert.

    Math.round(Math.random() * bildurl.length) liefert im Maximalfall dann 4 und dann wird das Bild im[4] aufgerufen - und das gibt's nicht, daher dann der Fehler!

    Mit Math.round(Math.random()*(bildurl.length-1) müßte es aber klappen ;-).

    Gruß

    Leonhard

    1. Hallo Leonhard,

      ich habe da einen Fehler entdeckt:

      Super ! da war also ein Wurm drin Herzlichen Dank - Die Fehlermeldungen sind weg
      Aber leider blockiert es die Bilder immer noch. Das lag anscheinend nicht an den Fehlern.

      Gruss und nochmals Danke

      Philipp