Addaw, ir a inicio Donar

Técnica ARIA WCAG 2.2

ARIA21Marcar los campos con errores con aria-invalid

Nombre oficial en el W3C: Usar aria-invalid para indicar un campo con error

En pocas palabras

Cuando un campo de formulario no supera la validación, se le añade aria-invalid="true". El lector de pantalla anuncia entonces que el dato no es válido. Lo ideal es enlazar también el mensaje de error con aria-describedby, para que se oiga qué falla y cómo arreglarlo.

Por qué es importante

Muchas webs marcan los errores solo con un borde rojo. Quien no ve bien o no distingue colores no sabe qué campo falla.

Con aria-invalid="true", el lector de pantalla dice «no válido» al llegar al campo. Si además el mensaje está enlazado, la persona oye, por ejemplo, «Correo electrónico, no válido, falta la arroba».

Cómo se hace

  1. No ponga aria-invalid="true" al cargar la página. Añádalo solo cuando el campo haya fallado la validación.
  2. Quítelo, o cámbielo a "false", en cuanto el dato sea correcto.
  3. Escriba junto al campo un mensaje de error visible que diga qué falla.
  4. Enlace el mensaje con el campo: dele un id y añada al campo aria-describedby con ese id.
  5. No confíe solo en el color. Incluya texto o un icono con texto alternativo.

Cómo comprobarlo

  1. Cargue la página y compruebe que ningún campo tiene todavía aria-invalid="true".
  2. Envíe el formulario con datos vacíos o mal escritos. Los campos que fallan deben pasar a aria-invalid="true".
  3. Corrija un dato y compruebe que el atributo desaparece o vuelve a "false".
  4. Con un lector de pantalla, vaya a un campo con error. Debe anunciar «no válido» y el texto del error.

Ejemplo

Campo de correo tras fallar la validación, con su mensaje de error enlazado.

<label for="correo">Correo electrónico</label>
<input type="email" id="correo"
       aria-invalid="true" aria-describedby="error-correo">
<p id="error-correo">
  Error: falta la arroba (@). Ejemplo: nombre@dominio.es
</p>
Ver el texto completo del W3C (traducción al español)

Esta es una traducción no oficial al español de la técnica ARIA21 de Techniques for WCAG 2.2, del W3C. Puede contener errores. El único documento oficial y normativo es la versión original en inglés, publicada en el sitio web del W3C.

Aplicabilidad

HTML con Accessible Rich Internet Applications.

Descripción

Esta técnica muestra cómo puede usarse aria-invalid para identificar los campos que no han superado la validación. El atributo aria-invalid puede usarse como parte de un patrón de validación personalizado, en lugar de usar el atributo required de HTML junto con tipos de entrada específicos (por ejemplo: type="email").

El atributo aria-invalid no debe establecerse en "true" antes de que se realice la validación de la entrada. Establecer aria-invalid en "false" equivale a no poner el atributo en el control de formulario.

Ejemplos

Usar aria-invalid en campos obligatorios

El atributo aria-invalid se usa en los campos obligatorios que están vacíos cuando se envía el formulario. Un mensaje situado encima del formulario indica al usuario que hay campos de formulario que deben completarse.

HTML:
<form name="signup" id="signup" method="post" action="">
  <p id="errors" aria-live="assertive"></p>
  <div>
    <label for="first">First Name (required)</label>
    <input aria-invalid="false" autocomplete="given-name" id="first" name="first" type="text">
  </div>
  <div>
    <label for="last">Last Name (required)</label>
    <input aria-invalid="false" autocomplete="family-name" id="last" name="last" type="text">
  </div>
  <div>
    <label for="email">Email (required)</label>
    <input aria-invalid="false" autocomplete="email" id="email" name="email" type="text">
  </div>
  <div>
    <button id="button" type="submit">Sign Up</button>
  </div>
</form>
CSS:
label.failed {
  background:#CE0000;
  color:#fff;
}
JavaScript:

Estas son las dos funciones JavaScript que establecen el atributo aria-invalid="true" y después crean el mensaje de error de validación:

const requiredFields = ['first', 'last', 'email'];
let errorCount = 0;
requiredFields.forEach(fieldId => {
  const field = document.getElementById(fieldId);
  if (field.value.trim() === '') {
    field.setAttribute('aria-invalid', 'true');
    document.querySelector(`label[for='${fieldId}']`).classList.add('failed');
    errorCount++;
  }
});
if (errorCount > 0) {
  errText.textContent = `Please complete all ${errorCount} required ${errorCount === 1 ? 'field' : 'fields'} and retry`;
}

Ejemplo funcional: usar aria-invalid en campos obligatorios.

Identificar errores en el formato de los datos

En este ejemplo, aria-invalid y aria-describedby se usan conjuntamente para indicar un error cuando el número de identificación personal (PIN), la dirección de correo electrónico o la fecha de inicio no tienen el formato esperado. El mensaje de error se asocia al campo mediante aria-describedby, y aria-invalid facilita encontrar por software los campos con errores.

Características

  • Añade un atributo aria-invalid="true" a un campo de formulario si faltan los datos introducidos o no tienen el formato esperado:
    • El PIN contiene menos de 4 caracteres;
    • La dirección de correo electrónico no cumple el formato requerido;
    • El apellido debe contener al menos dos letras;
    • La fecha de inicio de la póliza es anterior a la fecha de hoy.
  • Muestra un mensaje de error que se conecta por software con el campo de formulario correspondiente mediante el atributo aria-describedby.
HTML:
<div class="control">
  <label for="pin4">PIN * (4 digits)</label> 
  <input id="pin4" name="pin4" pattern="\d{4}" size="4" type="text" aria-describedby="pin4-errormsg" aria-invalid="true" class="error">
  <span class="errtext" id="pin4-errormsg">Error: PIN is required</span>
</div>
CSS:
.error {
  border: #CE0000 thin solid;
}
.errtext {
  background: #EEEEFF url('error-icon.svg') no-repeat right 0.25em center;
  color:#CE0000;
  display:block;
  margin-bottom: 1em;
  max-width: fit-content;
  padding: .25em 1.6em .25em .25em;
}
JavaScript:

Se necesita JavaScript para añadir los atributos aria-invalid, aria-describedby y class, así como para añadir el texto del error. Esta función es la parte relevante del script de validación completo:

function addFieldError(field, message) {
  const errId = field.id + '-errormsg';
  const errDiv = document.createElement('div');
  errDiv.className = 'errtext';
  errDiv.id = errId;
  errDiv.textContent = message;
  field.parentNode.appendChild(errDiv);
  field.setAttribute('aria-describedby', errId);
  field.setAttribute('aria-invalid', 'true');
  field.classList.add('error');
}

Ejemplo funcional: identificar errores en el formato de los datos.

Pruebas

Procedimiento

Para cada control de formulario que dependa de aria-invalid para transmitir un fallo de validación:

  1. Comprobar que aria-invalid no está establecido en true cuando no existe un fallo de validación.
  2. Comprobar que aria-invalid está establecido en true cuando sí existe un fallo de validación.
  3. Comprobar que las etiquetas asociadas por software o el texto de instrucciones asociado por software al campo proporcionan información suficiente para entender el error.

Resultados esperados

  • Las comprobaciones n.º 1 a n.º 3 son verdaderas.

Recursos

Cómo lo comprobamos en ADDAW

En cada auditoría de ADDAW revisamos esta técnica página a página y le entregamos los errores con capturas y la forma de corregirlos.

Solicitar una auditoría

Basado en la técnica ARIA21 del W3C (WCAG 2.2). Explicación y ejemplos: ADDAW. Traducción no oficial del texto del W3C © W3C, licencia de documentos del W3C. ¿Ha visto un error? Escríbanos.