¿Es válido tener dos elementos de entrada con el mismo nombre?

Respuestas:

61

Si es valido

Esto es bueno

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

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

Esto también está bien y generalmente se interpretará como una matriz de valores, por ejemplo {url: [1, 2]}, dependiendo de lo que haga su servidor. En una codificación de URL, se verá así url=1&url=2.

<form name="form1">
  <input type="hidden" name="url" value="1">
  <input type="hidden" name="url" value="2">
</form>
ZachB
fuente
28
Es válido. No creará confusión para el lenguaje del lado del servidor (incluso PHP, con sus convenciones para nombrar campos que comparten un nombre, manejará de manera consistente y predecible múltiples entradas que no usan esa convención). No creará confusión para JavaScript (que presentará los elementos como una colección y no ignorará uno de ellos). Puede crear confusión para los autores que escriben código sin saber lo que están haciendo, pero está bien según las especificaciones.
Quentin
@David Dorward: Gracias por explicarme, eliminé esa parte.
14
Esta publicación es engañosa. las entradas con el mismo nombre tienen la misma forma forman parte del estándar HTML; se utilizan, por ejemplo, para casillas de verificación.
beldaz
1
Es válido colocar múltiples entradas (ocultas o no) con el mismo nombre dentro de un solo formulario. Además, es bastante útil cuando se envían listas estructuradas o mapas asociativos, y a menudo es mucho más limpio (y menos frágil) que la serialización hacky DIY.
candu
1
Sé que este es un post antiguo, pero es un punto de aclaración. PHP necesita que le diga que los elementos están formando una matriz así: <code> <input type = "hidden" name = "url []" value = ....... </code> Si no lo hace Haga esto, php tomará el último valor del último campo y lo conectará a la matriz de formularios para la clave "url".
Mark C.
12

Si.

Además, es esencial si se trata de grupos de botones de opción.

Quentin
fuente
Exactamente. O con casillas de verificación, en cuyo caso puede poner [] al final de "url []" y crea una matriz para ser seleccionada.
Kerry Jones
2
@Kerry - Eso es un PHPismo. La mayoría de las bibliotecas de manejo de formularios están felices de no tener nombres especiales para grupos de controles.
Quentin
8

"Esto no es bueno" se analiza correctamente en todos los navegadores que conozco; si aparecen dos URL en la cadena codificada de URL, se tratará como una matriz. Pruebe esto en JQuery:

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

y obtendrás: "url=1&url=2"

un analizador de cadenas de consulta bien escrito devolverá una estructura json como esta:

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

¿Es estrictamente especificación? No, pero tampoco lo es crear una cadena de varias líneas al escapar del EOL con una barra invertida, como hice anteriormente.

Jeff Lowery
fuente
6

Sí, cada uno solo enviará sus respectivos formularios.

Si los tiene en el mismo formulario, uno anulará al otro y no es válido.

EDITAR: Como señaló Mahmoodvcs, la anulación solo ocurre en algunos lenguajes (como PHP), ya que no es inherente al HTML en sí.

Kerry Jones
fuente
12
Está usted equivocado. Si tiene varias entradas con el mismo nombre, una no anulará a la otra. Todas las entradas se agregarán al cuerpo de la solicitud en el orden en que aparecen en html. Y es válido: formulario HTML con múltiples elementos de control ocultos del mismo nombre
Mahmoodvcs
5
@Mahmoodvcs: Esto no es estrictamente cierto. Si el formulario se publica en un servicio PHP, gana el último valor. Si desea que se asignen varios valores a un nombre, cada nombre debe terminar en '[]'.
Jeff Lowery
6
Estamos hablando de HTML aquí, no de PHP.
Mahmoodvcs
2
@yardpenalty: no entiendo su pregunta (no estoy seguro de si Jeff responderá), pero si está cuestionando la capacidad de PHP, esto es definitivamente cierto (al menos antes de PHP7; no he comprobado si han cambiado eso todavía)
Kerry Jones
Lo siento, lo he descubierto. Si va a procesar usando php, debe crear una matriz de nombres. Creo que es bootstrap quien necesita que los botones de radio tengan el mismo nombre o algo así. De todos modos, sí puedes.
yardpenalty.com
3

Para probar si es válido o no, cree su página y pruebe en W3C aquí:

http://validator.w3.org/

Wassim AZIRAR
fuente
Y espero que el validador no tenga errores :-)
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
2

A) Su primer ejemplo está bien, porque el tiempo de envío de los formularios será diferente:

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

B) Su segundo ejemplo también está bien, pero no es una práctica de codificación estándar:

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

El código dos de Java extrae ambos valores:

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