2012-06-20 22 views
14

Tengo una razón válida para querer hacer esto, pero es una historia larga, así que me olvidaré de tratar de explicar por qué y solo preguntar si está bien hacerlo.¿Está bien tener múltiples formularios HTML con el mismo nombre?

Tengo una página en la que necesito tener varios formularios con el mismo nombre, pero solo quiero que se envíe el formulario cuyo botón de envío es clic. Por ejemplo, lo siguiente podría estar en mi página:

<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> 

¿Esto es aceptable?

+0

http://validator.w3.org – BalusC

+0

http://www.onlinewebcheck.com detecta errores de nombre de formulario duplicados en documentos HTML5 –

+0

por qué usar 'form name' en absoluto: http://stackoverflow.com/questions/ 8946320/whats-the-point-of-html-forms-name-attribute –

Respuesta

15

En cuanto a la especificación HTML 4.01, puede usar los elementos form con el mismo atributo name, ya que no existe un requisito de exclusividad sobre ellos. Sin embargo, hacerlo frustra el propósito de tales atributos. Están destinados a facilitar la referencia a los formularios en las secuencias de comandos del lado del cliente: si tiene <form name=foo>, entonces document.foo se refiere a ese formulario.

No está definido lo que sucede cuando se usa el mismo atributo name, pero lo que los navegadores parecen hacer es devolver una matriz. En su ejemplo, document.foo sería una matriz de 3 elementos, siendo document.foo[0] el primer formulario. Pero esto no es útil, ya que (suponiendo que no haya otros formularios en el documento) puede usar document.forms[0], con un significado bien definido.

El atributo name en sí no está actualizado para form elementos (pero no para los campos del formulario, donde sigue siendo esencial). El HTML 4.01 spec clause on form dice:

name = CDATA [CI] Este atributo nombres del elemento de modo que pueda ser referido a partir de hojas de estilo o secuencias de comandos. Nota. Este atributo se ha incluido para compatibilidad con versiones anteriores. Las aplicaciones deben usar el atributo id para identificar elementos. "

En los borradores HTML5, incluso las reglas formales no permiten el uso del mismo atributo name. El HTML5 clause on the name attribute on form dice que su valor "debe ser único entre los elementos form en la colección forms en la que se encuentra, si corresponde". Esta es una formulación confusa, pero es más seguro suponer que debe ser única dentro de los elementos form de un documento.

+0

El bit sobre document.foo para el caso de múltiples nombres que coinciden es indefinido, ¿no es esa la sección 3.1.4 accedores de árbol DOM desde http://dev.w3.org/html5/spec/dom.html#dom-document -namedItem-que al final de 3.1.4 define? – Alohci

+0

@Alohci, no está definido en las especificaciones actuales. Los borradores HTML5 definen un mecanismo para esto, pero también imponen un requisito de singularidad. –

+0

Sí, buen punto. Las discusiones sobre qué es HTML 4, qué es HTML5 y qué agentes de usuario * hacen *, dado que no tienen modos HTML 4 y HTML5 separados, a veces se vuelve muy complicado. – Alohci

10

Sí está permitido, solo id deben ser exclusivos. Sin embargo, no lo recomendaría, por qué incluso te pones en una posición de confusión por el camino.

El atributo name solo define lo que se representará cada elemento de campo de formulario como cuando se envía al servidor.

+5

El atributo 'name' de un elemento' form' no afecta los datos enviados al servidor.Es posible que lo haya confundido con los atributos 'name' para los campos de formulario. –

0

Cuando el usuario hace clic en un botón de enviar, solo ese formulario se tomará en acción. Aún así, debería ser mejor nombrarlos para que no esté confundido :)

1

También está bien en HTML5. Solo el nombre debe ser exclusivo dentro del formulario en sí.

Consulte los documentos: "El valor no debe ser la cadena vacía, y el valor debe ser único entre los elementos de formulario en la colección de formularios en la que se encuentra, si corresponde".

+1

Esto puede ser engañoso. En HTML5, el [W3C requiere] (https://www.w3.org/TR/html5/forms.html#attr-form-name) ** un formulario ** 'name' para ser único en una colección de formularios , Si alguna. Pero el 'nombre's de los elementos en un formulario puede ser [cualquier cadena no vacía] (https://www.w3.org/TR/html5/forms.html#attr-fe-name) excepto \ __ charset \ __ y _isindex_. – Qdeep

Cuestiones relacionadas