Mirko42: Namensraum: id- und name-Attribute - Kollision?

Hallo,

ich suche (zuverlässige) Lektüre/Doku zu der Frage, wie es sich eigentlich mit den Namensräumen für die id- und name-Attribute verhält. Meine mich zu erinnern, dass man Kollisionen hier vermeiden sollte. Weiß aber nicht mehr warum, find' auch grad nix dazu.

Folgender Code z.B.:

<input type="text" name="foo123" id="foo123"  value="">

wurde von http://validator.w3.org/ zumindest nicht angemäkelt. Kann ich nun davon ausgehen, dass es valide ist, oder wo könnten Probleme auftreten?

Wäre z.B. für einen Link (z.B. irgendwas auf w3.org) mit definiver Aussage oder sonstige Tips dankbar.

Mirko

  1. ich suche (zuverlässige) Lektüre/Doku zu der Frage, wie es sich eigentlich mit den Namensräumen für die id- und name-Attribute verhält. Meine mich zu erinnern, dass man Kollisionen hier vermeiden sollte. Weiß aber nicht mehr warum, find' auch grad nix dazu.

    Wenn bereitet der IE Probleme, der u.U. nicht unterschiedet zwischen id und name

    Folgender Code z.B.:

    <input type="text" name="foo123" id="foo123"  value="">

    wurde von http://validator.w3.org/ zumindest nicht angemäkelt. Kann ich nun davon ausgehen, dass es valide ist, oder wo könnten Probleme auftreten?

    valide ist es, aber wozu die ID?

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. valide ist es, aber wozu die ID?

      Struppi.

      z.B. um mit document.getElementById() drauf zu zugreifen ;)

      Mirko

      1. z.B. um mit document.getElementById() drauf zu zugreifen ;)

        Mirko

        ...oder um mit document.getElementByName auf den Namen zuzugreifen :-)

        gruß Kai

        1. Danke danke, kenn ich alles :). Beantwortet meine Frage aber nicht.

          Grund für die absichtliche Redundanz ist z.B., dass wenn ich auf ein Objekt im Dokument per

          BEZEICHNER.UNTERELEMENTE...

          zugreifen will, ich mir nicht Gedanken machen möchte, ob ich den Bezeichner im HTML per id oder per name zuweisen müsste. Scheint nämlich nicht ganz einheitlich geregelt zu sein. Und ich will nicht für jede Art von Element und jeden Browser nachgucken. Daher halte ich's mit der redundanten Vergabe der Bezeichner für am sichersten.

          Frage ist nur, ob's gemäß Standard wirklich valide ist.

          Mirko

          1. Grund für die absichtliche Redundanz ist z.B., dass wenn ich auf ein Objekt im Dokument per

            BEZEICHNER.UNTERELEMENTE...

            Das geht nicht.

            Frage ist nur, ob's gemäß Standard wirklich valide ist.

            Was das HTML angeht schon, aber mit dem obigen wirst du mit JS kein Element ansprechen können.

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. Hallo,

              BEZEICHNER.UNTERELEMENTE...

              Das geht nicht.

              Und ob das geht, z.B. bei Frames oder Iframes. Ok, aber vielleicht nur, weil die Dinger dann ja zumindest hierarchisch auf der Ebene vom window-Objekt sind. Ich überlege gerade, ob ich auch schon mal andere Sachen so dereferenziert habe.

              Was das HTML angeht schon, aber mit dem obigen wirst du mit JS kein Element ansprechen können.

              Folgender Test ist sehr interessant:

              <html>
              <head>
              <title>Call My Name</title>
              </head>
              <body>

              <iframe name="klaus" id="meier"></iframe>

              <script>
              alert(klaus)
              alert(meier)
              </script>

              </body>
              </html>

              1. hi,

                Folgender Test ist sehr interessant:
                [...]
                <iframe name="klaus" id="meier"></iframe>

                <script>
                alert(klaus)
                alert(meier)
                </script>

                Höchstens im IE "interessant" - interessant, wie sehr der den globalen Namensraum in JScript verschmutzt.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. Hallo,

                  Höchstens im IE "interessant" - interessant, wie sehr der den globalen Namensraum in JScript verschmutzt.

                  Gerade eben nicht. Eine Handvoll anderer gängiger Browser, die ich gerade getestet habe (FF, Opera, NS, Mozilla), können damit auch sehr gut umgehen und sagen sogar noch brav dazu, dass es sich um unterschiedliche Objekte (!) handelt (nämlich window und htmliframeelement), aus denen man dann demzufolge die Sachen auch auf andere Art und Weise rausholt. Diese Info unterschlägt der IE gewissenhaft.

                  Mirko

                  1. hi,

                    Höchstens im IE "interessant" - interessant, wie sehr der den globalen Namensraum in JScript verschmutzt.

                    Gerade eben nicht. Eine Handvoll anderer gängiger Browser, die ich gerade getestet habe (FF, Opera, NS, Mozilla), können damit auch sehr gut umgehen

                    Auch dann, wenn ein standardkonformes Dokument verwendet wird?

                    Gut, könnte in diesem Falle an der Frames-NodeList liegen.

                    Wenn es andere Elemente wären, bzw. Formularfelder, dürfte es (ohne Referenzierung des darüberliegenden forms) in den anderen Browsern m.E. keine automatisch zur Verfügung gestellten gleichnamigen JS-Objekte im window-Scope geben.

                    gruß,
                    wahsaga

                    --
                    /voodoo.css:
                    #GeorgeWBush { position:absolute; bottom:-6ft; }
              2. BEZEICHNER.UNTERELEMENTE...

                Das geht nicht.

                Und ob das geht, z.B. bei Frames oder Iframes. Ok, aber vielleicht nur, weil die Dinger dann ja zumindest hierarchisch auf der Ebene vom window-Objekt sind. Ich überlege gerade, ob ich auch schon mal andere Sachen so dereferenziert habe.

                Ja bestimmt, der IE sucht überall.

                Was das HTML angeht schon, aber mit dem obigen wirst du mit JS kein Element ansprechen können.

                Folgender Test ist sehr interessant:

                <iframe name="klaus" id="meier"></iframe>

                <script>
                alert(klaus)
                alert(meier)
                </script>

                Warum Firefox meier findet ist mir auch nicht klar, es sind auf jeden Fall nicht die Gleichen Objekte.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Folgender Test ist sehr interessant:

                  ...

                  Warum Firefox meier findet ist mir auch nicht klar, es sind auf jeden Fall nicht die Gleichen Objekte.

                  Sag ich ja. Deshalb isses ja auch so interessant. Im IE dürften's auch verschiedene Objekte sein, nur sagt der's mit dem einfachen Test nicht genau.

                  Mirko

      2. valide ist es, aber wozu die ID?

        Struppi.

        z.B. um mit document.getElementById() drauf zu zugreifen ;)

        Wenn das Element einen Namen hat, gibt es document.froms[].elements[]

        Struppi.

        --
        Javascript ist toll (Perl auch!)
    2. Hallo,

      valide ist es, aber wozu die ID?

      Für ein label?

      Viele Grüße
      Patrick

      --
      "Though this be madness, yet there's method in't."
      sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
      1. Huhu,

        valide ist es, aber wozu die ID?

        Für ein label?

        Genau. Hab's grad überprüft. Wenn man sich beim label mit dem for= auf den name bezieht, isses dem Browser schnurz. Da kann man soviel auf das Label klicken wie man will. Bezieht sich das for= hingegen auf die id, springt der Cursor beim Klick auf's Label in den Input.

        Weil ich eben zu faul bin, mir genau das zu merken, würd' ich gerne einfach immer die gleichen Bezeichner nehmen. Es sollte nur valide sein.

        Mirko

        1. Hi,

          Genau. Hab's grad überprüft. Wenn man sich beim label mit dem for= auf den name bezieht, isses dem Browser schnurz. Da kann man soviel auf das Label klicken wie man will. Bezieht sich das for= hingegen auf die id, springt der Cursor beim Klick auf's Label in den Input.

          Weil ich eben zu faul bin, mir genau das zu merken, würd' ich gerne einfach immer die gleichen Bezeichner nehmen. Es sollte nur valide sein.

          Das funktioniert aber nicht immer. Bei mehreren Radio-Buttons in derselben Gruppe muß das name-Attribut für die Radiobuttons identisch sein (daran wird ja die Gruppe erkannt), die ids für die Label müssen aber unterschiedlich sein (einerseits, weil ids von vornherein eindeutig innerhalb des Dokuments sein müssen, andererseits, weil sonst nicht klar wäre, welches Label für welchen Radiobutton gedacht ist).

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Das funktioniert aber nicht immer. Bei mehreren Radio-Buttons in derselben Gruppe muß das name-Attribut für die Radiobuttons identisch sein (daran wird ja die Gruppe erkannt), die ids für die Label müssen aber unterschiedlich sein (einerseits, weil ids von vornherein eindeutig innerhalb des Dokuments sein müssen, andererseits, weil sonst nicht klar wäre, welches Label für welchen Radiobutton gedacht ist).

            Ha! Hab' ich doch wieder was gelernt. Hab mich immer schon gefragt, was man in dem Fall eigentlich machen soll. Hätte einfach mal nachdenken müssen ;).

            Mirko