Ir directamente al contenido de esta página
No, este artículo no trata del enésimo script que asegure que los datos de un usuario nos llegan lo más depurados posible. Aunque para el formulario de contacto ficticio de los ejemplo he creado varios .js, y en el caso del tercero he añadido una validación de respaldo en el servidor por medio de PHP, de lo que quiero hablar es de un medio accesible de advertir de los errores de validación a un usuario que esté empleando un lector de pantalla.
Aunque creo que ya se han desterrado en este siglo —espero no estar proyectando mis deseos—, no hace tanto no era infrecuente encontrarse con que al enviar un formulario se nos comunicaban los errores por medio de ventanas de alerta de JavaScript, al estilo de ésta:
Si bien alert()
es uno de los mejores amigos del desarrollador web mientras hace pruebas —y pruebas, y pruebas, y pruebas— mientras programa un script, como medio de comunicación con el usuario cuenta con la sutileza de una bofetada, además de una serie de inconvenientes desde el punto de vista de la usabilidad:
Y si alguien quiere hacer la prueba, le invito a que envíe este formulario sin rellenar ninguno de los campos. Verá que la experiencia es dolorosa.
En vista de la pobre experiencia de usuario que suponían las ventanas de alerta, la tendencia de los últimos tiempos se ha dirigido a presentar advertencias textuales al usuario en las inmediaciones del campo en cuestión, de manera similar a como yo lo hago en este segundo ejemplo:
Las formas concretas pueden variar dependiendo de la complejidad de la programación o el diseño subyacente, desde un texto plano a las más sofisticadas capas con transparencias, pero desde el punto de vista de la programación mi experiencia de usuario me ha llevado a identificar tres técnicas bastante extendidas:
alt
, pero eso es imposible si la imagen pertenece a la hoja de estilo y no al marcado del documento.src
de la imagen se modifica para que ésta se sustituya por otra que cuenta con el texto de advertencia. En el mejor de los casos, si se atiende al punto 6.2 de las WCAG 1.0 (inglés), este método presenta el problema que indicaré para la técnica 3; en el peor, estamos en la misma situación que para la técnica 1.Como prueba, navego por el formulario con JAWS 6.20 sobre Internet Explorer 7: entro en el modo de formulario, y salto del campo de los apellidos al de la edad sin rellenar ningún dato. Lo que oigo es: «ENTER modo formulario activado TAB apellidos asterisco TAB edad asterisco». Como se ve, JAWS no ha leído el mensaje de «Por favor, rellene el campo con sus apellidos».
Si alguien no puede hacer pruebas, puede escucharlo a continuación:
Así, pensando en la cuestión del foco, se me ocurrió la solución que explico a continuación.
Como solución, se me ocurrió crear tras los campos del formulario una lista de vínculos cuyo contenido son precisamente los texto de las advertencias. Al navegar con la tecla Tab, tras el último campo y antes del botón de enviar el primer vínculo de los existentes atrapa el foco…
…y así se hace legible para el lector. Además, emplear un vínculo tiene la ventaja adicional de que se puede proporcionar un acceso rápido al campo que se quiera corregir. Cuando se vuelve al campo en cuestión, elimino el vínculo correspondiente, y así, si se corrigen todos los errores, tras el último campo se accede al botón de envío. Dejo aquí el mismo formulario de antes, con esta técnica aplicada.
Al terminar de navegar por los campos con JAWS, el lector recorre la lista de advertencias. Lo que oigo es: «por favor repita su contraseña asterisco cuadro de contraseña escriba texto TAB advertencia falta completar el campo con su nombre si lo desea haga clic en este enlace para introducirlo enlace».
Como antes, se puede escuchar la siguiente grabación:
Por supuesto, como siempre que se trabaja en un script con la accesibilidad en mente, proporciono un mecanismo de validación en el lado del servidor para los usuarios que no tengan activado el soporte de JavaScript, que muestra la lista con las advertencias antes de ofrecer el mismo formulario:
De momento éste es el mejor medio que se me ha ocurrido, pero espero que sirva a alguien de inspiración para encontrar alguna solución mejor.