Moin nochmal!
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--
Im Prinzip ist der Zugriff über Bildnamen absolut identisch wie der Zugriff über Bildnummern. Die Funktion hätte unverändern funktioniert! :)
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.
Tja, und da ist der Fehler.
Entweder gibst du den Bildnamen direkt als Objektname an:
document.Bildname
Dann müßte aber folgendes Bild existieren:
<img name="Bildname">
Mit Variablen zu arbeiten ist mit solch einem Konstrukt fast unmöglich.
Die Zugriffsweise über ein Array funktioniert aber:
document.images["Bildname"] sollte bei obigem Bild funktionieren. Bedenke, daß es sich bei "Bildname" um den Namen handelt, nicht um eine Variable.
Dann sah die Funktion so aus:
Änderungen:
function Bildwechsel(Bildname,Bildobjekt)
{
if (document.images[Bildname])
{
document.images[Bildname].src = Bildobjekt.src;
}
else if (document.layers["tabelle"].document.images[Bildname])
{
document.layers["tabelle"].document.images[Bildname].src = Bildobjekt.src;
}
}
Und der Aufruf:
<a href="index.htm"
onMouseOver="Bildwechsel('home',Highlight3);"
onMouseOut="Bildwechsel('home',Normal3);">
Der ist in Ordnung!
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"
Vermutlich ist da irgendwas durch deine Änderungen in Schieflage geraten. Wenn Objekte falsch abgefragt werden, kann's zu Chaos führen. :)
Zum Debuggen ist eine Strategie immer gut: Wenn du wissen willst, was wann wo passiert, setze an die passenden Stellen ein alert(); rein. Alert ist die beste Funktion für sowas, auch wenn die Funktion von Mouseovern damit ziemlich gestört wird: Es geht ein Dialogfenster auf, und du kannst den dort enthaltenen Text frei definieren und sogar Objekte und Variablen mit ausgeben:
function Bildwechsel(Bildname,Bildobjekt)
{
alert("Bildwechsel aufgerufen");
if (document.images[Bildname])
{
alert("Normaler Bildtausch zu Bild "+Bildobjekt.src);
document.images[Bildname].src = Bildobjekt.src;
}
else if (document.layers["tabelle"].document.images[Bildname])
{
alert("NS4-Bildtausch zu Bild "+Bildobjekt.src);
document.layers["tabelle"].document.images[Bildname].src = Bildobjekt.src;
}
}
Die Funktion ist durch diese Alerts reichlich unbenutzbar für den Alltag: Egal wo man den Mauszeiger hinbewegt, ständig unterbrechen einen die Dialogboxen. Mit der Return-Taste sind sie, ohne Mausbewegung, aber schnell bestätigt - und du erhälst einen Überblick, was in deinem Javascript ausgeführt wird, und was nicht.
- Sven Rautenberg