by Vash
10. Oktober 2008 11:29
Da benutzt man seit Jahren Javascript und HTML und immer wieder erstaunt der Internet Explorer mit Bugs die eigentlich einerseits schon längst behoben sein könnten oder andererseits nie auftreten dürfte. Warum Microsoft seine zahlreichen Bugs in mehreren seiner Browsergenerationen zuläßt ist nur schwer begreiflich. Wahrscheinlich um die "Kompatibilität" zu schlecht geschriebenen HTML und Javascript Code zu gewährleisten.
Was ein anderer Blog bereits beschrieben hat, ist mir gerade selbst wiederfahren. Benutzt man in Formularen die Attribute "id" und "name", dann sollte man veremiden Element A einen gleichlautenden Namen zu geben wie Element B als ID besitzt. Einfach darum weil getElementById im IE eigentlich nicht nur das Attribut "id" berücksichtigt sondern auch mal im Namen nachguckt. Mit anderen Worten, welcher Wert beim Absenden eines solchen Formulares beim Server ankommt ist nicht derjenige mit der richtigen ID sondern derjenige der Wert des Elements das zuerst gefunden wird, auf die der Parameter passt. Da dies in anderen Browsern richtig funktioniert, darf man diese Vermischung der Namen und IDs nicht eingehen. Da man sonst einfach die falschen Werte am Server erhält.
Eigentlich, könnte der schlaue Theoretiker jetzt antworten, ist es ja auch eine schlechte Namensgebung wenn ein Element einen Namen hat das ein anderes auch als ID benutzt, unabhängig davon was der Browser damit macht. Eigentlich hat er recht. Nur hat hier die Praxis zugeschlagen, bedingt durch die Situation dass es in HTML kein "readonly" Selectfeld gibt. Benutzt man aber ein "Hiddenfeld" und ein "Disabled Selectfeld", kann man ein readonly Selectfeld simulieren. Um den Wert des Selectsfeldes zu übergeben gibt man dem Hiddenfeld den Namen des Selectfelds und der im Hintergrund arbeitende Code erkennt keinen Unterschied. Bleibt die ID des Selectfelds jedoch unverändert, dann arbeitet der Javascriptcode der das Selectfeld bedient auch unverändert. Das wäre eigentlich ein Vorteil, für den man eine "schlechte Namensgebung" in Kauf nehmen kann.