Hallo,
Die Frage ist nun, wieso funktioniert es über setAttributeNode und ohne Funktionsreferenz in Firefox, Opera und Safari. Weil sie nett sein wollen obwohl es nicht gehen müsste?
Ja, das kann man so sagen.
Es ist nirgendwo geregelt, dass ein Browser element.onevent = "string" akzeptieren muss. Das traditionelle Event-Handling weist ausschließlich Funktionsobjekte zu. Allerdings sollte setAttribute("onevent", "javascript-code") funktioniert. Das tut es im IE nicht, das ist einfach ein Fehler des IEs.
Und schlußendlich ist at nach
element.onclick = function () { navi_click('1') }
at = element.getAttribute("onsubmit")in Firefox null. Ist es also gar kein reguläres Attribut?
Nein, es ist eine Objekteigenschaft, man speichert einfach ein Funktionsobjekt als Eigenschaft des Elementobjektes.
Wie sich das zu getAttribute verhält, ist wie gesagt nirgends definiert, daher hat Firefox wohl eigenmächtig entschieden, in dem Fall null zurückzugeben.
Über das Thema würde ich gerne mehr nachlesen, hast Du da einen Tip?
Weiß ich leider nicht - worauf du da gestoßen bist sind auch bloß Unterschiede aufgrund fehlender Standardisierung und aufgrund von bekannten Browserfehlern.
Faustregel ist, dass Event-Handler mit JavaScript immer nach dem Schema
element.onevent = funktionsreferenz;
gesetzt werden. Und dort kann man auch einen Funktionsausdruck definieren, also element.onevent = function (...) { ... };
(Es gibt natürlich noch fortgeschrittene Möglichkeit zum Registrieren von Event-Handlern.)
Mathias