¿Puede un campo de entrada tener dos etiquetas?


Mary tenía un poco de forma, y sus campos estaban etiquetados así.
Cada vez que un error se colaba, la confusión sembraba.

Tengo una etiqueta para cada campo de entrada... un asunto bastante normal. Después de validar el formulario, estoy mostrando un pequeño párrafo útil en la parte superior del formulario que detalla qué información falta o es incorrecta.

¿Puedo tener dos etiquetas para el mismo campo de entrada? ¿Uno en la forma adecuada y otro en el texto de recordatorio de validación? ¿Hay alguna ¿razón por la que no debería hacer esto?

Author: dakab, 2010-05-14

6 answers

Asumo que esta pregunta es sobre formularios HTML. De la especificación :

El elemento LABEL puede utilizarse para adjuntar información a los controles. Cada elemento LABEL está asociado con exactamente un control de formulario.

Por lo tanto, cada control de formulario puede ser referenciado por múltiples etiquetas, pero cada etiqueta solo puede hacer referencia a un control. Así que si tiene sentido tener una segunda etiqueta para un control (y en la situación que describe, lo hace) no dude en agregar una segunda etiqueta.

 124
Author: James Sumners,
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-05-13 20:34:12

El HTML es legal y funciona (al hacer clic en cualquiera de las etiquetas se transferirá el foco al campo en cuestión).

Es un poco más complicado hacer lo correcto por razones de accesibilidad.

No es un enfoque "común", y debido a eso, al menos un lector de pantalla común (que probé con NVDA) solo lee la primera etiqueta cuando cambia el enfoque al campo ignores ignora cualquier etiqueta adicional para el mismo campo.

Así que si su mensaje de error está en la parte superior de la página, un ciego o el usuario con baja visión al tabular los campos solo escuchará el mensaje de error al aterrizar en el campo en cuestión, no la etiqueta "real" al lado.

Por lo tanto if si la frase del mensaje de error correctamente, que podría ser una buena cosa (sin duda mejor que solo resaltar el campo de no validación en rojo!).

 33
Author: Rob Whelan,
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-10-21 21:33:47

Sí, puede tener varias etiquetas apuntando al mismo control de formulario. Esto es perfectamente legal :

<label for="fname">First name</label>
<label for="fname">Enter your info</label>
<label for="fname">Why not a third label</label>
<input type="text" id="fname" name="fname">

Esto es solo un ejemplo... normalmente envolverías estas líneas con una etiqueta ya que están cerca.

 22
Author: Gert Grenander,
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-05-13 20:38:08

No lo intenté, pero supongo que será posible. Pero no recomiendo usarlo, porque una etiqueta define para qué es el campo, un mensaje de error no lo hace.

 2
Author: Guido Hendriks,
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-05-13 20:16:23

¿Has probado qué pasa? Si funciona, no creo que cause ningún daño a su formulario ni a la página. Y obtendrá un plus porque el uso será capaz de hacer clic en el error de validación y obtener el enfoque en el campo correcto.

 1
Author: Felipe Cypriano,
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-05-13 20:16:08

Aunque legal, no es la mejor manera de asociar múltiples etiquetas con un único elemento <input>. En su lugar, debe utilizar el aria-labelledby atributo.

Primero se dan atributos únicos id a los elementos <label>. Luego coloca un atributo aria-labelledby en el elemento <input>, estableciendo su valor a los valores id de los elementos <label>, separados por un espacio.

Aquí está el ejemplo de la página "Usando el atributo aria-labelledby" en la web de MDN docs:

<div id="billing">Billing</div>

<div>
    <div id="name">Name</div>
    <input type="text" aria-labelledby="billing name"/>
</div>
<div>
    <div id="address">Address</div>
    <input type="text" aria-labelledby="billing address"/>
</div>
 0
Author: John S,
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
2018-04-13 02:13:38