Björn: Formular ohne Name ansprechen (XHTML1.1)

Hallo!
Ich habe eine XHTML 1.1 Dokument. Da ist ein Formular drin und die Formularelemente möchte ich per Javascript ansprechen.

So würde ich das gerne machen - wie gewohnt:
var eingabe = document.formularname.feldname.value;

Das funktioniert aber leider nicht, denn das Attribut "name" ist in form-Tags in XHTML 1.1 nicht mehr erlaubt.

Jetzt schätze ich mal, daß ich <form id="formularname"> schreiben muß?
Wie spreche ich die Elemente dann per Javscript an?
Und das läuft dann über DOM? Ältere Browser kommen damit nicht klar?

Danke für Antworten und schönes Wochenende!

  1. Hi,

    Jetzt schätze ich mal, daß ich <form id="formularname"> schreiben muß?
    Wie spreche ich die Elemente dann per Javscript an?

    getElementsById() ist dein Freund: http://selfhtml.teamone.de/javascript/objekte/document.htm#get_element_by_id

    Und das läuft dann über DOM? Ältere Browser kommen damit nicht klar?

    Jo, läuft über DOM. Erst an Moz und IE 5 klappt das...
    Ältere Browser kennen sowas nicht, kommen also damit nicht klar.

    Viele Grüße...

    Alex :)

  2. Ich habe eine XHTML 1.1 Dokument.

    Im Prinzip ist das die Ursache deines Problems. Wenn du deine Seiten für HTML-Browser kompatibel schreiben willst, ist XHTML 1.1 nicht angemessen. XHTML 1.1 ist nicht im Hinblick auf HTML-Kompatibilität ausgerichtet. Dafür existiert XHTML 1.0, welches HTML-Kompatibilität unter den Bedingungen der Kompatibilitätsrichtlinien http://www.edition-w3c.de/TR/2002/REC-xhtml1-20020801/#_Toc6101548 zulässt. XHTML 1.1 soll eigentlich nur mit dem Medientyp application/xhtml+xml versendet werden (in der Regel entspricht das der Dateiendung .xhtml, wenn der Webserver entsprechend konfiguriert ist), also als »echtes« XHTML.

    Da ist ein Formular drin und die Formularelemente möchte ich per Javascript ansprechen.

    So würde ich das gerne machen - wie gewohnt:
    var eingabe = document.formularname.feldname.value;

    Diese Syntax wird nicht funktionieren, wenn dein XHTML 1.1 Dokument als XML ausgewertet wird, sprich, wenn du es als application/xhtml+xml statt text/html (der Medientyp für HTML) an entsprechend fähige Browser sendest. (Opera 7 kann bspw. zwar application/xhtml+xml, aber in diesem Modus kein JavaScript. Insofern hat diese Vorgehensweise momentan sowieso wenig Relevanz.)

    Du hast offenbar sowieso vor, momentan ausschließlich text/html zu verwenden. Aber XHTML-Dokumente zu schreiben, welche nicht als XHTML ausgewertet werden können, ist wenig nachhaltig und bringt kurz- und langfristig nur Nachteile gegenüber HTML 4.01. Daher sollten die Scripte sowohl in beiden Fällen funktionieren, in HTML-Browsern und (weitesgehend zukünftigen) XHTML-Browsern. Meines Wissens funktioniert die unten genannte Methode auf gegenwärtigen Browsern in einem XHTML 1.0-Dokument mit der <form name="formularname" id="formularname"> passabel, die Details müsstest du selbst in Erfahrung bringen.

    Das funktioniert aber leider nicht, denn das Attribut "name" ist in form-Tags in XHTML 1.1 nicht mehr erlaubt.
    Jetzt schätze ich mal, daß ich <form id="formularname"> schreiben muß?

    Ja. An dessen Stelle tritt gemäß DOM HTML tatsächlich das id-Attribut. In einem HTML-kompatiblen XHTML-Dokument sollten beide Attribut mit gleichem Inhalt angegeben werden, siehe oben.

    Wie spreche ich die Elemente dann per Javscript an?

    Gemäß DOM HTML http://www.w3.org/TR/REC-DOM-Level-1/level-one-html.html ist die Syntax folgendermaßen:
     document.forms.formularname.elements.formularfeldname.value
    bzw.
     document.forms['formularname'].elements['formularfeldname'].value;
    (»formularname« und »formularfeldname« sind hier als Platzhalter gemeint. formularname ist der Wert der Attribut id und name.)

    getElementById ist m.E. nicht nötig und auch nicht abwärtskompatibel.

    An DOM 2 HTML erklärt:
    Das Interface HTMLDocument http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268 hat eine Eigenschaft forms http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-1689064, welche Referenzen auf alle form-Element des Dokuments in Form einer HTMLCollection http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-75708506 enthält. Auf die Elemente in dieser Liste kann man über dessen id- bzw. name-Attribute zugreifen. Im Falle des form-Elements also über name (HTML) und id (XHTML). Das wäre konkret document.forms.formularname bzw. document.forms['formularname'].
    Das Interface dieser form-Elemente HTMLFormElement http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-40002357 hat eine Eigenschaft elements http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-76728479 welche ebenfalls vom Typ HTMLCollection http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-75708506 ist und Referenzen auf alle Formularfeld-Elemente (input, textarea, select usw.) des jeweiligen Formulars enthält. Ein Zugriff auf diese ist auch über id bzw. name möglich, im Falle von Formularelementen natürlich über das name-Attribut: document.forms.formularname.elements.formularfeldname bzw. document.forms['formularname'].elements['formularfeldname']

    Und das läuft dann über DOM? Ältere Browser kommen damit nicht klar?

    Netscape 4 beispielsweise kann alle drei Varianten document.formularname.formularfeldname.value, document.forms.formularname.elements.formularfeldname.value und document.forms['formularname'].elements['formularfeldname'].value. Diese Schreibweise ist ja nicht neu.