¿Está bien que un elemento HTML tenga el mismo [nombre] que su [id]?


Estoy trabajando en incrustar una aplicación flash en una página web utilizando el método Satay:

<object type="application/x-shockwave-flash" data="embeddy.swf"
id="embeddy" name="embeddy">
  <param name="movie" value="embeddy.swf" />
</object>

Quiero que flash proporcione el objectID correcto en ExternalInterface.objectID, lo que significa que necesito establecer los atributos name y id para el object.

Normalmente intento evitar nombrar colisiones con elementos en HTML, pero ¿hay algo malo en establecer ambos atributos con el mismo valor en este caso?

¿Qué pasa con los formularios HTML? ¿Alguien siente que vale la pena establecer un (n) (input | select | textarea ) los atributos name y id del elemento al mismo valor?

Author: zzzzBov, 2010-11-08

5 answers

Utiliza ID para la manipulación de JavaScript.

Se usan nombres para el envío de campos de formulario.

Los dos no están relacionados. Por lo tanto, establecer ambos en el mismo valor está bien, pero no es necesario.

 50
Author: Diodeus - James MacFarlane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-08 20:58:59

No solo está bien, es bastante común.

Los IDs se utilizan para Javascript (y en menor medida, para CSS).

Los nombres se utilizan para los campos del formulario para especificar el nombre del valor enviado.

Sin embargo, las versiones anteriores de IE han conocido errores que significan que casi se ve obligado a especificar los dos de la misma en muchos casos. (suponiendo que desea apoyar las versiones anteriores de IE, por supuesto!)

Lo único que hay que tener en cuenta es que los IDs deben ser únicos. Por lo tanto, si tiene botones de opción que tienen el mismo nombre, no puede usar el mismo ID para todos ellos. En la mayoría de los otros casos, sin embargo, está perfectamente bien tenerlos igual.

 6
Author: Spudley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-08 21:06:39

¡Sí! Esto está absolutamente bien.

id es el identificador del lado del cliente (para cuando se busca un elemento en el DOM)

name se usa durante el envío del formulario para PUBLICAR/OBTENER los valores.

Fuera de un elemento de entrada no debería ser necesario usar name en absoluto. Pero dar a los elementos de entrada un id permite que sean buscados en el DOM de una manera consistente.

 1
Author: Moo-Juice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-08 21:01:22

Acabo de descubrir la respuesta HTML4 a mi pregunta :

Los atributos id y name comparten el mismo espacio de nombres. Esto significa que ambos no pueden definir un ancla con el mismo nombre en el mismo documento. Se permite utilizar ambos atributos para especificar el identificador único de un elemento para los siguientes elementos: A, APPLET, FORM, FRAME, IFRAME, IMG, and MAP. Cuando ambos atributos se usan en un solo elemento, sus valores deben ser idénticos.

Ahora, asumo que la regla es aplicado a applet y iframe debería, por extensión, funcionar para las etiquetas object y embed. En cualquier caso, el uso de un nombre e id idénticos no ha producido eventos inusuales hasta la fecha.

 1
Author: zzzzBov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-27 15:41:06

Lo hago todo el tiempo (principalmente porque algunos navegadores en el pasado - IE viene a la mente - solo utilizan el parámetro name al enviar los datos del formulario). El uso de ID hace que el código de validación de formularios sea mucho más limpio, IMO.

 0
Author: Brian Flanagan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-08 21:01:00