Thomas Bandt

Über mich | Kontakt | Archiv

JavaScript: document.getElementById() - Stolperstein oder richtiger Bug?

Wir portieren gerade eine größere Anwendung, die seit mehr als 5 Jahren ausschließlich für den Internet Explorer gepflegt wurde, auf die aktuelle Browser-Generation, d.h. Firefox, Opera und Safari. Das bedeutet vor allem auch viel Arbeit an bestehenden JavaScripts, da einerseits Microsoft oft Extrawürste gebraten (modal_dialog z.B.) und es andererseits den Entwicklern durch "weniger Strikte Beachtung der Regeln" auch leicht gemacht hat.

Dabei hat der Kollege vorhin eine interessante Entdeckung gemacht:

Internet Explorer und Opera verhalten sich bei document.getElementById() im Zweifelsfall nicht so, wie sie es sollten. Nämlich dann, wenn ein Element sowohl ein Name-Attribut, als auch eine ID besitzt.

Beispiel:

Value: 1, Name: Hallo1, ID: -
Value: 2, Name: Hallo1, ID: Hallo1
klick!

Das erwartete, und in unseren Augen einzig richtige, Ergebnis kann hier nur "2" lauten, da nur die zweite Checkbox die ID "Hallo1" besitzt - was auch richtig ist, da IDs schließlich "Identifier" sind - und die müssen eindeutig sein. Anders beim name-Attribut, das kann (und muss teilweise, etwa bei CheckBoxen) durchaus mehrfach vorkommen. Hier dürfte es aber eigentlich auch gar keine Rolle spielen, da ja nicht documentGetElementsByName() sondern eben documentGetElementById() verwendet wird.

Das Ergebnis sieht aber wie folgt aus:

Meiner Meinung nach eindeutig ein Bug, der mir so bisher noch nicht bekannt war. Andere Meinungen?

Kommentare

  1. Robert schrieb am Freitag, 11. Januar 2008 05:45:00 Uhr:

    Der IE hat die Macke, dass er bei document.getElementById(...) auch den Namen untersucht und gibt einfach das erste Ergebnis aus. Opera verhält sich nahe am IE, damit dieses "korrekt" dargestellt werden.

    So aufgefallen ist es mir aber nicht, weil das "name" Attribute eigentlich kaum bei mir auftaucht.
  2. marco schrieb am Freitag, 11. Januar 2008 10:12:00 Uhr:

    Also ich nutze Opera 9.5 Beta und der liefert das richtige Ergebnis, also 2 zurück. Scheint dementsprechend behoben zu sein in der nächsten Version.
  3. Thomas schrieb am Freitag, 11. Januar 2008 10:26:00 Uhr:

    Das ist ja schonmal ne wichtige Info, danke.
  4. Andreas schrieb am Samstag, 12. Januar 2008 13:51:00 Uhr:

    Das Verhalten Opera 9.5 kann ich bestätigen. Aus meienr sicht ist das eindeutig eine Funktionalität, die aus Gründen der Fehlertoleranz eingebaut wurde, was nun aber wie hier beschrieben zu falschen Ergebnissen bei Fehlerfreier Eingabe führen.


« Zurück  |  Weiter »