onmouseover ist kein klassisches HTML-Attribut, sondern ein Javascript-Eventhandler, der eben dafür gebraucht werden kann, HTML Objekten bei bestimmten Ereignissen Javascript-Funktionen "auslösen zu lassen".
Und weil der IE ihn eben nicht als klassisches HTML-Attribut ansieht, wirds so nix, fürchte ich.
Aber was funktioniert, ist den Event als direktes Javascript Attribut des Objektes zu behandeln (allerdings ist er eben auch kein klassisches Javascript Attribut, sondern ein Javascript-Eventhandler..also nochmal eine "Eigenart", dazu aber gleich). Also nicht über den Umweg "setAttribut", wo du eben ein HTML Attribut ansprechen würdest (was es ja nicht so 100% ist), sondern eben einfach, wie ein normales Attribut eines Javascript Objektes über document.getElementById('navi').onmouseover
Und da du hier kein schon mal kein HTML-Attribut ansprichst, kannst du auch nicht davon ausgehen, dass du einfach den Text hinterlegst, den du bei "onmouseover" in einem HTML Tag hinterlegen würdest.
Vielmehr musst du eben bedenken, dass du hier ein Javascript Attribut eines Javascript Objektes ansprichst (dass dieses Javascript Objekt dann letztendlich ein HTML-Objekt ist, ist "egal"). Und dieses Javascript-Attribut (das in Wirklichkeit ja auch kein klassisches Attribut ist, wie schon gesagt, sondern eben ein Eventhandler) erwartet als "Typ" keinen einfachen String, sondern eine tatsächliche Funktion. Alles klar? Nein? Mir auch nicht
Langer Rede kurzer Sinn:
So.. sollte es gehen ^^".