Namensraum: id- und name-Attribute - Kollision?
Mirko42
- html
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
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.
valide ist es, aber wozu die ID?
Struppi.
z.B. um mit document.getElementById() drauf zu zugreifen ;)
Mirko
z.B. um mit document.getElementById() drauf zu zugreifen ;)
Mirko
...oder um mit document.getElementByName auf den Namen zuzugreifen :-)
gruß Kai
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
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.
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>
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
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
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
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.
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
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.
Hallo,
valide ist es, aber wozu die ID?
Für ein label?
Viele Grüße
Patrick
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
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
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