2012-06-20 12 views
14

Ich habe einen guten Grund, dies zu tun, aber es ist eine lange Geschichte, also werde ich vergessen zu erklären, warum und nur fragen, ob es in Ordnung ist zu tun.Ist es in Ordnung, mehrere HTML-Formulare mit demselben Namen zu haben?

Ich habe eine Seite, auf der ich mehrere Formulare mit dem gleichen Namen haben muss, aber ich möchte nur das Formular, dessen Absenden-Schaltfläche klicken, um gesendet werden. Zum Beispiel könnte Folgendes auf meiner Seite sein:

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

text 

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

text 

<form name="input" action="" method="get"> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 

Ist das akzeptabel?

+0

http://validator.w3.org – BalusC

+0

http://www.onlinewebcheck.com erkennt doppelte Namensfehler in HTML5-Dokumenten –

+0

Warum verwenden Sie 'form name' überhaupt: http://stackoverflow.com/questions/ 8946320/whats-the-point-von-html-forms-name-attribut –

Antwort

15

In Bezug auf die HTML-4.01-Spezifikation können Sie form-Elemente mit demselben Attribut name verwenden, da keine Eindeutigkeitsanforderung für sie besteht. Dies vereitelt jedoch den Zweck solcher Attribute. Sie dienen dazu, Formulare in der clientseitigen Skripterstellung einfacher zu verwenden. Wenn Sie <form name=foo> haben, verweist document.foo auf dieses Formular.

Es ist undefiniert, was passiert, wenn das gleiche name Attribut verwendet wird, aber welche Browser scheinen, ein Array zurückzugeben. In Ihrem Beispiel wäre document.foo ein Array mit drei Elementen, wobei document.foo[0] die erste Form ist. Dies ist jedoch nicht sinnvoll, da Sie (vorausgesetzt, es gibt keine anderen Formen im Dokument) document.forms[0] mit einer wohldefinierten Bedeutung verwenden könnten.

Das Attribut name selbst ist veraltet für form Elemente (aber nicht für Formularfelder, wo es wichtig ist). Die HTML 4.01 spec clause on form sagt:

"name = cdata [CI] Dieses Attribut benennt das Element, so dass es aus Stylesheets oder Skripten verwiesen werden kann. Hinweis. Dieses Attribut wurde aus Gründen der Abwärtskompatibilität hinzugefügt. Anwendungen sollten das Attribut id verwenden, um Elemente zu identifizieren. "

In den HTML5-Entwürfen verbieten selbst die formellen Regeln die Verwendung des gleichen name-Attributs. Die HTML5 clause on the name attribute on form sagt, dass ihr Wert "unter den form Elementen in der forms Sammlung, in der sie sich befindet, eindeutig sein muss". Dies ist eine verwirrende Formulierung, aber es ist am sichersten anzunehmen, dass es innerhalb der form Elemente eines Dokuments eindeutig sein muss.

+0

Das Bit über document.foo für den Fall mit mehreren übereinstimmenden Namen undefiniert ist, ist nicht das, was Abschnitt 3.1.4 DOM-Baum-Accessoren von http://dev.w3.org/html5/spec/dom.html#dom-document -namedItem-was am Ende von 3.1.4 definiert? – Alohci

+0

@ Alohci, es ist in aktuellen Spezifikationen undefined. Die HTML5-Entwürfe definieren einen Mechanismus dafür, aber sie stellen auch eine Eindeutigkeitsanforderung auf. –

+0

Ja, schöner Punkt. Diskussionen darüber, was HTML 4 ist, was HTML5 ist und was User-Agenten tun *, da sie keine separaten HTML 4 und HTML5 Modi haben, werden manchmal sehr kompliziert. – Alohci

10

Ja, es ist erlaubt, nur id 's müssen eindeutig sein. Ich würde es jedoch nicht empfehlen, warum sich selbst in eine Position versetzen, um auf der Straße verwirrt zu sein.

Das Attribut name definiert nur, wie jedes Formularfeldelement dargestellt wird, wenn es an den Server gesendet wird.

+5

Das name-Attribut eines form-Elements hat keinen Einfluss auf die an den Server gesendeten Daten.Sie haben es möglicherweise mit "name" -Attributen für Formularfelder verwechselt. –

0

Wenn der Benutzer auf eine Senden-Schaltfläche klickt, wird nur dieses Formular in Aktion ausgeführt. Dennoch sollte es besser sein, sie so zu benennen, dass Sie nicht verwirrt sind.

1

Es ist auch in HTML5 ok. Nur der Name muss innerhalb des Formulars eindeutig sein.

Weitere Informationen finden Sie in der Dokumentation: "Der Wert darf nicht die leere Zeichenfolge sein, und der Wert muss unter den Formularelementen in der Formularsammlung, in der er sich befindet, eindeutig sein."

+1

Dies kann irreführend sein. In HTML5 erfordert das [W3C] (https://www.w3.org/TR/html5/forms.html#attr-form-name) ** den Namen eines Formulars **, um in einer Formularsammlung eindeutig zu sein , wenn überhaupt. Aber die Namen der Elemente in einer Form können [jede nicht leere Zeichenfolge] sein (https://www.w3.org/TR/html5/forms.html#attr-fe-name) außer \ __ charset \ __ und _isindex_. – Qdeep

Verwandte Themen