Ist es gültig, zwei Eingabeelemente mit demselben Namen zu haben?

Antworten:

61

Ja, es ist gültig

Das ist gut

<form name="form1">
  <input type="hidden" name="url" value="1">
</form>

<form name="form2">
  <input type="hidden" name="url" value="2">
</form>

Dies ist ebenfalls in Ordnung und wird im Allgemeinen als Array von Werten interpretiert, z. B. {url: [1, 2]}abhängig davon, was Ihr Server tut. In einer URL-Codierung sieht es so aus url=1&url=2.

<form name="form1">
  <input type="hidden" name="url" value="1">
  <input type="hidden" name="url" value="2">
</form>
ZachB
quelle
28
Es ist gültig. Die serverseitige Sprache wird nicht verwirrt (selbst PHP mit seinen Konventionen zum Benennen von Feldern, die einen Namen gemeinsam haben, verarbeitet konsistent und vorhersehbar mehrere Eingaben, die diese Konvention nicht verwenden). Es wird keine Verwirrung für JavaScript erzeugen (wodurch die Elemente als Sammlung dargestellt werden und eines davon nicht ignoriert wird). Es / könnte / Verwirrung bei Autoren verursachen, die Code schreiben, ohne zu wissen, was sie tun, aber es ist in Ordnung mit der Spezifikation.
Quentin
@ David Dorward: Danke, dass du das erklärt hast, ich habe diesen Teil entfernt.
14
Dieser Beitrag ist irreführend. Eingaben mit demselben Namen und derselben Form sind Teil des HTML-Standards - sie werden beispielsweise für Kontrollkästchen verwendet.
Beldaz
1
Es ist gültig, mehrere Eingaben (versteckt oder anderweitig) mit demselben Namen in einem einzigen Formular zu platzieren. Darüber hinaus ist es sehr nützlich, wenn strukturierte Listen oder assoziative Karten eingereicht werden, und es ist oft viel sauberer (und weniger spröde) als die hackige DIY-Serialisierung.
Candu
1
Ich weiß, dass dies ein alter Beitrag ist, aber ein Punkt der Klarstellung. PHP muss Ihnen mitteilen, dass die Elemente ein Array wie folgt bilden: <code> <input type = "hidden" name = "url []" value = ....... </ code> Wenn Sie dies nicht tun Wenn Sie dies tun, nimmt PHP den letzten Wert des letzten Felds und fügt ihn in das Formulararray für den Schlüssel "url" ein.
Mark C.
12

Ja.

Darüber hinaus ist es wichtig, wenn Sie mit Optionsfeldgruppen arbeiten.

QUentin
quelle
Genau. Oder mit Kontrollkästchen. In diesem Fall können Sie [] am Ende "url []" einfügen und ein Array erstellen, das abgeholt werden soll.
Kerry Jones
2
@ Kerry - Das ist ein PHPism. Die meisten Formularbearbeitungsbibliotheken sind sehr froh, keine speziellen Namen für Gruppen von Steuerelementen zu haben.
Quentin
8

"Das ist nicht gut" wird in jedem mir bekannten Browser korrekt analysiert. Wenn zwei URLs in der URL-codierten Zeichenfolge angezeigt werden, wird sie als Array behandelt. Versuchen Sie dies in JQuery:

$('<form name="form1">\
     <input type="hidden" name="url" value="1">\
     <input type="hidden" name="url" value="2">\
</form>').serialize()

und du wirst bekommen: "url=1&url=2"

Ein gut geschriebener Parser für Abfragezeichenfolgen gibt eine JSON-Struktur wie folgt zurück:

 {"url":["1", "2"]}

Ist es streng spezifiziert? Nein, aber es wird auch keine mehrzeilige Zeichenfolge erstellt, indem der EOL mit einem Backslash entkommen wird, wie ich es oben getan habe.

Jeff Lowery
quelle
6

Ja - jeder wird nur mit seinen jeweiligen Formularen einreichen.

Wenn Sie sie in derselben Form haben, überschreibt eine die andere und sie ist ungültig.

BEARBEITEN: Wie Mahmoodvcs hervorhob, tritt das Überschreiben nur in einigen Sprachen (wie PHP) auf, da es nicht in HTML selbst enthalten ist.

Kerry Jones
quelle
12
Sie liegen falsch. Wenn Sie mehrere Eingänge mit dem gleichen Namen haben, wird man nicht die anderen außer Kraft setzen. Alle Eingaben werden in der Reihenfolge, in der sie in HTML angezeigt werden, an den Text der Anforderung angehängt. Und es ist gültig: HTML-Formular mit mehreren versteckten Steuerelementen des gleichen Namens
Mahmoodvcs
5
@ Mahmoodvcs: Dies ist nicht unbedingt wahr. Wenn das Formular an einen PHP-Dienst gesendet wird, gewinnt der letzte Wert. Wenn einem Namen mehrere Werte zugewiesen werden sollen, muss jeder Name mit '[]' enden.
Jeff Lowery
6
Wir sprechen hier von HTML, nicht von PHP.
Mahmoodvcs
2
@yardpenalty - Ich verstehe Ihre Frage nicht (unsicher, ob Jeff antworten wird), aber wenn Sie die Fähigkeiten von PHP in Frage stellen, ist dies definitiv wahr (zumindest vor PHP7 - ich habe nicht überprüft, ob sie sich geändert haben das noch)
Kerry Jones
Entschuldigung, ich habe das herausgefunden. Wenn Sie mit PHP verarbeiten möchten, müssen Sie ein Namensarray erstellen. Ich denke, es ist Bootstrap, der Optionsfelder benötigt, um den gleichen Namen zu haben oder so. Wie auch immer, ja, das kannst du.
Yardpenalty.com
3

Um zu testen, ob es gültig ist oder nicht, erstellen Sie Ihre Seite und testen Sie bei W3C hier:

http://validator.w3.org/

Wassim AZIRAR
quelle
Und hoffe, dass der Validator fehlerfrei ist :-)
Ciro Santilli 31 冠状 病 病 六四 法轮功
2

A) Ihr erstes Beispiel ist in Ordnung, da der Zeitpunkt der Einreichung unterschiedlich sein wird:

<form id="1">
    <input type="hidden" name="url" value="1">  
</form>
<form id="2">
    <input type="hidden" name="url" value="2">  
</form>

B) Ihr zweites Beispiel ist ebenfalls in Ordnung, aber keine Standardcodierungspraxis:

<form>
    <input type="hidden" name="url" value="1">  
    <input type="hidden" name="url" value="2">  
</form>

Java Code 2 extrahiert beide Werte:

Map<String,String[]> parmMap = requestObj.getParameterMap();   
String input1 = parmMap.get("url")[0];   
String input2 = parmMap.get("url")[1];
Aksahy N Shelke
quelle