Philipp Sauer: OnMouseOver in NS 4.7 funzt nicht

Beitrag lesen

Könntest du. Aber warum kleckern? Lieber gleich klotzen! Gehen muß es letztendlich ja in allen Browsern.

Ich wollte erst einmal eine lauffähige NS Version basteln um auszuschließen, dass der Fehler in der if-anweisung liegt. wenn man sich so wenig auskennt, dass man kaum irgendeine Zeile als fehlerquelle ausschließen kann, ist es doch sinnvoll die potentiellen Fehlerursachen so gering wie möglich zu halten.

Zuerst mal eine Schönheitskorrektur: Wenn du Bilder ansprechen willst, dann gib ihnen einen Namen: <img name="bild01" ...> Damit mußt du dann beim Funktionsaufruf nicht mehr Bildnummern zählen, sondern kannst einfach den Namen übergeben. Das macht die Dinge wesentlich einfacher, vor allem bei nachträglichen Änderungen. Es reicht ja schon, wenn im Quelltext davor ein neues Bild hinzukommt.

Das stimmt. Außerdem wird ja scheinbar in NS in jedem neuen Layer von 0 neu losgezählt. So bekomme ich in unterschiedlichen Browsern mit den Bildnummern zwangsläufig Probleme.

Und dann:
document.layers[tabelle]
                ^^^^^^^
So wie das zur Zeit dasteht, ist tabelle eine Variable. Das _ist_ sie aber nicht, sondern gemeint ist die Zeichenkette "tabelle". Also sollte es auch so geschrieben werden:
document.layers["tabelle"]

Danke!

Wenn du schlau bist und verschiedene Layer mit zu wechselnden Bildern hast, übergibst du diesen Wert auch an deine Bildwechselfunktion.

Brauche ich in diesem Fall nicht.

Ok, aktueller Stand bis hierher (ich bastel mal meine und deine Funktion zusammen:
function Bildwechsel(Bildnr,Bildobjekt)
{
  if (document.images[Bildnr])
  {
    //  bildtausch traditionell
  }
  else if (document.layers["tabelle"].document.images[Bildnr])
  {
    document.layers["tabelle"].document.images[Bildnr].src = Bildobjekt.src;
  }
}

Das hat so wiet dann auch funktioniert, bis ich versuchen wollte über die Bildnamen, anstatt über die Nummern zu gehen. In Selfhtml habe ich gelesen:

--schnipp--

...  mit dem Namen der Grafik
Dabei geben Sie mit document.BildName den Namen an, den Sie bei der Definition der Grafik im einleitenden <img>-Tag im Attribut name= angegeben haben

--schnapp--

Das mit name="" hattest Du ja auch schon geschrieben. Ich hab dann also "images[Bildnr]" durch [Bildname] ersetzt. Beim Aufruf entsprechend dann den Namen (in Hochkommas) anstelle der Nummer übergeben.

Dann sah die Funktion so aus:

function Bildwechsel(Bildname,Bildobjekt)
{
  if (document.[Bildname])
   {
    document.[Bildname].src = Bildobjekt.src;
   }
  else if (document.layers["tabelle"].document.[Bildname])
   {
    document.layers["tabelle"].document.[Bildname].src = Bildobjekt.src;
   }
}

Und der Aufruf:

<a href="index.htm"
onMouseOver="Bildwechsel('home',Highlight3);"
onMouseOut="Bildwechsel('home',Normal3);">

und durch Webwasher kann man sowas rausfiltern und es wird generell nicht gern gesehen, in der Statuszeile rumzupfuschen. Also laß es lieber sein.

es steht noch drin, aber du hast recht.

Was noch fehlt: "// bildtausch traditionell"
Und das ist schnell gemacht:

document.images[Bildnr].src = Bildobjekt.src;

Weil ich im IE und NS Fehlermeldungen bekam, hab ich die
eckigen Klammern um Bildname entfernt. das hat die meldungen
reduziert, aber jetzt bekomme ich im IE:
"document.layers.tabelle ist Null oder kein Objekt"
Dabei sollte der IE doch gar nicht so weit kommen, der sollte doch die Standardversion benutzen, das dort stehende Objekt
document.Bildname scheint es jedoch nicht zu geben. Hm.

An welchen Klammern oder Kommatas liegt`s ? Ich verstehe es nicht!

Vielen Dank
für die echt ausführliche Hilfe bisher.