Hallo Leute,
Ich bin etwas konfusioniert über mein Problem. Das Problem, das ich jetzt vorstelle, habe ich schon etwas vereinfacht - im Kern sollte es das aber sein:
Ich erstelle mit PHP ganz dynamisch eine beliebig große Tabelle. Die Zeilen "<tr>" haben dabei alle eine eindeutige id zugewiesen bekommen und sollen aufleuchten, wenn die Maus des Betrachters über die Zeile fährt. In etwa so:
<tr id="tablerow_1" onMouseover="highlight(this.id)" onMouseout="darken(this.id">
Soweit ist noch alles dufte. Jetzt soll das Highlighting der Tabellenzeilen nicht etwa sofort und abrupt sondern ganz modern smooth passieren. Das Ganze natürlich in Javascript:
function highlight(id)
{
if (window.document.all[id].style.backgroundColor != '#a0a0a0')
{
window.setTimeout("forcecolor('"+id+"', '#909090')", 0);
window.setTimeout("forcecolor('"+id+"', '#959595')", 40);
window.setTimeout("forcecolor('"+id+"', '#a0a0a0')", 80);
}
}
function darken(id)
{
if (window.document.all[id].style.backgroundColor != '#888888')
{
window.setTimeout("forcecolor('"+id+"', '#959595')", 0);
window.setTimeout("forcecolor('"+id+"', '#909090')", 40);
window.setTimeout("forcecolor('"+id+"', '#888888')", 80);
}
}
Die if-Abfrage ist eigentlich nutzlos, aber ich habe sie schon eingebaut, um mein Problem zu beheben, was trotzdem nicht geklappt.
Was ist jetzt mein Problem?
Wenn in der Tabelle andere Elemente auftauchen wie ein Bild oder ein kursiver Text oder so, dann passiert Folgendes: Fährt die Maus innerhalb der Zeile auf ein Bild oder einen kursiven Text, wird einmal darken(this.id) und sofort danach highlight(this.id) aufgerufen, so als ob die Maus die Zeile verlassen hätte und sofort wieder überfahren würde. Ziemlicher Quatsch, weil die Maus die Zeile nie verlässt!
Das Verhalten beobachte ich bei allen Browsern (Safari, Firefox, InternetExplorer, Opera), wobei Opera noch einen Tick anders ist: bei Opera kann ich die Maus so langsam auf das Bild bewegen, dass es einen Punkt (oder eine Umrandungslinie) gibt, wo nur der Befehl darken(this.id), nicht aber highlight(this.id) raus geht. Erst wenn ich die Maus bewege (Richtung egal) wird highlight(this.id) wieder aufgerufen.
In meinen Augen kann das Verhalten der Browser kaum gewollt sein. Irritieren tut mich aber trotzdem, dass das Verhalten bei allen Browsern zu finden ist. Wenn ich die Timeouts weglasse und sofort färbe, entsteht der Fehler nicht.
Versucht habe ich schon, wie man oben sieht, die derzeitige Farbe abzufragen, den ersten Timeout auf eine oder mehr Millisekunden zu setzen. Einen Handler wie document.all.id.ismouseover scheint es in Javascript nicht zu geben.
Meine Frage ist jetzt, ob es einen Ausweg für mich gibt, ob das ein bekannter Fehler ist oder ob ich mein letztes Gebet sprechen kann. Echte Hoffnung habe ich nicht mehr, aber euch traue ich doch noch eine Menge zu.