kobold: [Opera 9.21] getElementById sucht in Wirklichkeit nach dem Namen

Hi,
ich habe zur Zeit in Opera 9.21 ein Problem, welches die getElementById Funktion in JavaScript betrifft.
Ich habe auf einer Seite mehrere Formulare mit den selben Eingabefeldern, die zwar den selben Namen aber eine unterschiedliche ID haben. Ich will jetzt per oben genannter Funktion auf die Felder zugreifen, aber Opera scheint die Funktion nicht richtig anzuwenden.

Ich habe mal eine Beispielseite vorbereitet:
http://mitglied.lycos.de/mrcalhoun/TESTopera.html

Der Code sagt eindeutig, dass bei dem letzten Formular auf das Element mit der ID "Beschreibung" zugegriffen werden soll. Opera greift aber auf das erste Element mit dem Namen "Beschreibung" zu.

Bei den beiden obersten Formularen funktionert es wunderbar.

  1. Das muss aber an etwas anderem liegen. Opera benutzt schon die ID. Irgendwo muss in deinem Code ein Fehler sein.
    Doch bevor du keinerlei Einrückungen und Strukturierungen vornimmst, habe ich keine Lust, mich da durchzuwühlen.

    1. Doch bevor du keinerlei Einrückungen und Strukturierungen vornimmst, habe ich keine Lust, mich da durchzuwühlen.

      Du meinst wahrscheinlich den von Lyocs eingefügten Werbecode.

      Ich habe einen Kommentar eingefügt, wo mein Code aufhört.
      Nur das darüber ist von Bedeutung.

    2. Ich kann kein Fehler im Code entdecken.

      Für mich steht fest das Opera 9.21 zunächst beim name-Attribute sucht, was falsch ist.

      1. Das habe ich mir auch gedacht.
        Ich habe das Problem jetzt so gelöst, dass ich an die ID des letzten Textfelds auch eine Nummer angefügt habe, wodurch Opera 9.21 das ID-Attribut nicht mehr mit dem name-Attribut verwechselt.

        An die Code-Polizisten:
        Ich habe mich bei so einem kleinen Problem auf das Wesentlichste beschränkt. Die Ursprungsseite ist komplett W3C konform ^^

        Trotzdem danke.

        1. Hallo,

          An die Code-Polizisten:
          Ich habe mich bei so einem kleinen Problem auf das Wesentlichste beschränkt. Die Ursprungsseite ist komplett W3C konform ^^

          Das, was du hier als Beispiel vorgestellt hast, war ein Haufen Murks. Und das, was du hier als Beispiel vorgestellt hast, ist das, wovon man ausgehen kann.

          Grüße
          Thomas

          1. Hallo,

            An die Code-Polizisten:
            Ich habe mich bei so einem kleinen Problem auf das Wesentlichste beschränkt. Die Ursprungsseite ist komplett W3C konform ^^

            Das, was du hier als Beispiel vorgestellt hast, war ein Haufen Murks.

            Wobei der gleiche Fehler auch auf validen und als application/xhtml+xml ausgelieferten Seiten passiert -> Beispiel. Scheinbar versuchen die Opera-Entwickler mal wieder den IE zu klonen :-(

            mfg. Daniel

            1. Hallo,

              Das, was du hier als Beispiel vorgestellt hast, war ein Haufen Murks.

              Wobei der gleiche Fehler auch auf validen und als application/xhtml+xml ausgelieferten Seiten passiert -> Beispiel. Scheinbar versuchen die Opera-Entwickler mal wieder den IE zu klonen :-(

              Gute Argument.
              Gucken wir das an.
              OK, ich könnte gleich am Anfang sagen, dass wenn man XHTML einsetzt, sollte man wissen, dass "name" deprecatend ist. Abe gut, das soll nicht das Problem sein.

              Das Problem ist, dass name und id in XHTML die gleichen Werte haben soll (für ein und dasselbe Element) und innerhalb des Dokuments einmalig sein soll.

              "HTML Compatibility Guidelines" (für XHTML) :http://www.w3.org/TR/xhtml1/#guidelines
              -----------
              Further, since the set of legal values for attributes of type ID is much smaller than for those of type CDATA, the type of the name attribute has been changed to NMTOKEN. This attribute is constrained such that it can only have the same values as type ID, or as the Name production in XML 1.0 Section 2.3, production 5. Unfortunately, this constraint cannot be expressed in the XHTML 1.0 DTDs. Because of this change, care must be taken when converting existing HTML documents. The values of these attributes must be unique within the document, valid, and any references to these fragment identifiers (both internal and external) must be updated should the values be changed during conversion.
              -----------

              Sprich: <input name="abcd" id="abcd" ...  /> ist 100% korrekt.
              Ein <input name="abcd"  ...  />  <hr id="abcd" /> ist aber streng genommen falsch. Aber wie gesagt: "Unfortunately, this constraint cannot be expressed in the XHTML 1.0 DTDs" so, dass der Validator das auch nicht überprüfen kann.

              Man kann schon darüber streiten ob Opera hier falsch vorgeht, wenn er diese Regel streng auslegt oder nicht.

              Grüße
              Thomas

              1. Hallo,

                Das, was du hier als Beispiel vorgestellt hast, war ein Haufen Murks.

                Wobei der gleiche Fehler auch auf validen und als application/xhtml+xml ausgelieferten Seiten passiert -> Beispiel. Scheinbar versuchen die Opera-Entwickler mal wieder den IE zu klonen :-(

                Gute Argument.
                Gucken wir das an.
                […] wenn man XHTML einsetzt, sollte man wissen, dass "name" deprecatend ist.

                Blödsinn; das name-Attribut ist bei Formularelementen durchaus weiterhin erlaubt. Sonst könnte man das <form> genauso deprecated setzen, weil es unbrauchbar wäre.

                Abe gut, das soll nicht das Problem sein.

                Ist es auch nicht.

                Das Problem ist, dass name und id in XHTML die gleichen Werte haben soll (für ein und dasselbe Element) und innerhalb des Dokuments einmalig sein soll.

                Ja - sofern man es abwärtskompatibel für Anker einsetzen will. Andere Hintergründe kann ich nicht erkennen.

                Man kann schon darüber streiten ob Opera hier falsch vorgeht, wenn er diese Regel streng auslegt oder nicht.

                Und was ist, wenn es diese ID einfach nicht gibt? So wie hier?

                mfg. Daniel

                1. Hallo,

                  Gute Argument.
                  Gucken wir das an.
                  […] wenn man XHTML einsetzt, sollte man wissen, dass "name" deprecatend ist.

                  Blödsinn; das name-Attribut ist bei Formularelementen durchaus weiterhin erlaubt.

                  Das ist richtig, da hast du recht.

                  Man kann schon darüber streiten ob Opera hier falsch vorgeht, wenn er diese Regel streng auslegt oder nicht.

                  Und was ist, wenn es diese ID einfach nicht gibt? So wie hier?

                  Auch da liegst du richtig, jedoch ist das kein Bug sondern ein Featur ;-)
                  "I can confirm that Opera's behaviour is by design." -->
                  http://www.quirksmode.org/bugreports/archives/2005/09/documentgetElementById_may_return_element_with_a_n.html

                  HTH

                  Grüße
                  Thomas

                  1. Hallo,

                    Man kann schon darüber streiten ob Opera hier falsch vorgeht, wenn er diese Regel streng auslegt oder nicht.

                    Und was ist, wenn es diese ID einfach nicht gibt? So wie hier?

                    Auch da liegst du richtig, jedoch ist das kein Bug sondern ein Featur ;-)

                    Jaja, genau wie die fehlerhafte Implementierung von setAttribute() ein Feature des IE ist…

                    Bisher hatte ich aus ideologischer Sicht ;-) noch keinen Grund, den Opera schlecht zu finden. Aber so gering sind die Unterschiede zum IE scheinbar gar nicht.

                    "I can confirm that Opera's behaviour is by design." -->

                    „Ich kann bestätigen, dass Operas Verhalten am Design liegt“? Oder wie wird das übersetzt?

                    mfg. Daniel

                    1. Hallo Daniel.

                      "I can confirm that Opera's behaviour is by design." -->

                      „Ich kann bestätigen, dass Operas Verhalten am Design liegt“? Oder wie wird das übersetzt?

                      „Ich kann bestätigen, dass Operas Verhalten Absicht ist.“

                      Vergleiche „Works as designed.“

                      Einen schönen Montag noch.

                      Gruß, Mathias

                      --
                      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
                      debian/rules
                    2. Hi,

                      Bisher hatte ich aus ideologischer Sicht ;-) noch keinen Grund, den Opera schlecht zu finden. Aber so gering sind die Unterschiede zum IE scheinbar gar nicht.

                      Wenn die Opera-Programmierer schon beizeiten auch das IE-DOM einbauen, sind Unterschiede auch bestimmt nicht erwünscht.

                      Gruß, Cybaer

                      --
                      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                      1. Hallo,

                        Bisher hatte ich aus ideologischer Sicht ;-) noch keinen Grund, den Opera schlecht zu finden. Aber so gering sind die Unterschiede zum IE scheinbar gar nicht.

                        Wenn die Opera-Programmierer schon beizeiten auch das IE-DOM einbauen, sind Unterschiede auch bestimmt nicht erwünscht.

                        Ich find's halt nur schade, dass Opera immer die Kompatiblität zu den jeweils meist-genutzten Browsern über die (in diesem Fall auch recht sinnvollen) Standards setzt. Vor allem angesichts der recht starken Gecko/KHTML-Offensive.

                        Aber was will man auch von closed-Source erwarten. Hauptsache et funzt :-(

                        mfg. Daniel

  2. Hallo,

    ich habe zur Zeit in Opera 9.21 ein Problem, welches die getElementById Funktion in JavaScript betrifft.
    Ich habe auf einer Seite mehrere Formulare mit den selben Eingabefeldern, die zwar den selben Namen aber eine unterschiedliche ID haben. Ich will jetzt per oben genannter Funktion auf die Felder zugreifen, aber Opera scheint die Funktion nicht richtig anzuwenden.

    Ich habe mal eine Beispielseite vorbereitet:
    http://mitglied.lycos.de/mrcalhoun/TESTopera.html

    Ich weiss nicht was es ist, aber es ist keine Seite.
    Das Ding beginnt mit:
    <div id="z23ccb121" style="text-align: center; margin: 0px; padding: 0px;" align="center"></div>

    Kein DOCTYPE, kein <html>, <head>, <body> ...etc.
    Es ist ein Murks ohne gleichen. Da ist es schon ein mittleres Weltwunder, dass die Browser überhaupt etwas darstellen.

    Grüße
    Thomas

    1. Hi,

      Kein DOCTYPE, kein <html>, <head>, <body> ...etc.
      Es ist ein Murks ohne gleichen. Da ist es schon ein mittleres Weltwunder, dass die Browser überhaupt etwas darstellen.

      ? Das ist doch eh alles optional.

      Das einzige Pflichtelement ist TITLE. OK, das fehlt auch, aber die Browser brauchen es nicht ... :)

      ... solange also der Server den gewünschten Dokuenten-Typ ausliefert ...

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!