Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Describe las nuevas características de los formularios en HTML5: nuevos controles, nuevos
atributos y validación nativa. También se indica cómo simular estas características para el caso de
que el usuario utilice un navegador antiguo (empleando código JavaScript) y las pseudoclases de
CSS3 útiles al trabajar con formularios de este tipo. Contenido:
1. Introducción.
2. Nuevos controles de formulario.
3. Nuevos atributos.
4. Compatibilidad con navegadores antiguos.
5. Pseudoclases CSS3 relacionadas con los formularios HTML5.
1. INTRODUCCIÓN
Los formularios presentan bastantes novedades en HTML5. Estas novedades no solo incluyen
nuevos controles de formulario, sino que HTML5 proporciona por primera vez la funcionalidad
de validar los datos sin necesidad de recurrir a un lenguaje adicional como JavaScript. Así pues,
con HTML5 podremos hacer que un determinado campo sea requerido, que se ajuste al formato
de una dirección de correo electrónico o que tenga un valor numérico dentro de un rango
definido. Todo esto indicándolo de una forma declarativa, es decir, a través de las etiquetas y
atributos del lenguaje HTML5, sin necesidad de programar en JavaScript o en un lenguaje
similar.
Esto no significa que la validación en el servidor ya no sea necesaria. Como siempre, debemos
entender que la validación que realiza el navegador es un primer paso.
Adicionalmente, la aplicación del servidor realizará su correspondiente validación.
En cuanto a los navegadores modernos, la mayoría implementan todas las características de
formularios que vamos a ver, siendo Chrome un buen ejemplo de ello, por lo que lo vamos a
utilizar en esta lección. Veamos un formulario HTML5 en funcionamiento. Pulsa y abriré
esta página en Chrome. Ahora puedes ver un formulario donde el usuario tiene que rellenar una
serie de campos y pulsar en un botón. La estructura del formulario se ha conseguido con
etiquetas tradicionales HTML y otras nuevas de HTML5.
El aspecto, mediante CSS. Por ahora no hay código JavaScript que se ejecute en este
formulario. Fíjate que algunos de los campos presentan un mensaje de ayuda. Por ejemplo, en el
campo donde se debe introducir una dirección de correo electrónico, se indica el formato
esperado.
Haz clic en el botón Siguiente de la parte inferior del formulario.
Lo primero que vemos es que el navegador nos informa de una serie de campos obligatorios, por
lo que no ha continuado con el envío de la información.
Deberemos rellenarlos antes de continuar con el siguiente paso.
Escribe los siguientes datos en el formulario:
Nombre: Juan Rodríguez Malonda
Email: jrodriguezmail.com
Dirección: Plaza Mayor, 12, 3er piso, 7ª puerta.
Código postal: 48000
Pulsa de nuevo en el botón Siguiente.
Ahora, aunque se han rellenado los campos obligatorios, el navegador insiste en que la dirección
de correo electrónico no es válida.
Fíjate que el navegador puede comprobar el formato o patrón de la dirección, pero no si se trata
de una dirección existente.
En este caso, parece que falta el carácter @.
Haz clic tras la z de rodriguez.
Añade el carácter @.
Pulsa de nuevo en Siguiente.
De esta forma accedemos a otra página web, donde también aparece un nuevo formulario.
Los atributos pattern y maxlength están disponibles para varios tipos de controles.
Con pattern establecemos la expresión regular que permite indicar qué valores introducidos
en el control son válidos; y con maxlength el número de carácteres máximo que puede
introducirse en el control.
Para restringir los valores introducidos en este tipo de campo, es necesario utilizar los atributos
pattern y maxlength.
Algunos navegadores pueden proporcionar un teclado especial para la introducción de números
de teléfono. Por ejemplo, los navegadores de dispositivos móviles suelen hacerlo.
type="email": control especializado en la introducción de direcciones de correo
electrónico.
Lo hemos podido ver en funcionamiento. Así pues, el navegador será capaz de validar la
información introducida por el usuario, comprobando que se trata de una dirección de correo
electrónico válida sin necesidad de especificar ningún atributo de la etiqueta.
Es habitual, como ocurre con un campo de tipo tel, que los navegadores de dispositivos móviles
cambien el teclado para facilitar la introducción de una dirección de este tipo. Por ejemplo,
incluyen el carácter @ en el teclado.
type="color": es un control especializado en la introducción de colores.
type="url": es un control especializado en la introducción de direcciones URL. Realiza la
validación adecuada, de forma similar a la que realiza el tipo email.
Haz clic en la pestaña de la página formulario_pedido2.html.
type="number": control especializado en la introducción de valores numéricos. Solo
admite números.
Se puede afinar el valor esperado mediante los atributos min y max, que representan el valor
mínimo y máximo, respectivamente, que puede introducir el usuario.
Además, con el atributo step, indicamos cuánto se incrementa o decrementa cada vez.
3. NUEVOS ATRIBUTOS
Como puedes ver, se utiliza el atributo required. Lo mismo podemos decir en la línea 23 para el
campo de la fecha de entrada. Simplemente con utilizar este atributo, el navegador se encargará
de asegurar que el usuario introduce un valor en esos campos antes de enviar la información al
servidor. Esta será la primera validación. Después podría completarse con otras. Por ejemplo,
para un control de tipo email y requerido, primero se comprobará que el usuario ha introducido
un valor y, después, que dicho valor es una dirección de correo electrónico válida.
Haz clic en la pestaña correspondiente al formulario_pedido1.html.
Otro atributo cuyo resultado hasta ahora conseguíamos mediante JavaScript es placeholder.
El atributo placeholder permite introducir texto de ejemplo o de consejo en los cuadros de texto.
La idea es que el usuario reciba alguna indicación para rellenar el campo con la información
solicitada.
Por ejemplo, hemos utilizado este atributo en los cuadros de texto donde se solicita el nombre,
email y teléfono del usuario (líneas 15, 19 y 23, respectivamente).
Así pues, alguna indicación para que el usuario sepa que debe introducir su nombre y apellidos o
el formato que se espera para su teléfono pueden ser de gran ayuda.
El valor del atributo placeholder es una cadena con el texto de ayuda.
Cuando el usuario pulsa en uno de estos campos, ese texto puede desaparecer o no en función de
la implementación que haga el navegador.
Eso sí, en el momento que escribimos en él, desaparece el texto de placeholder.
Volvamos a comprobarlo. Vuelve al navegador.
Pulsa en el botón Atrás de Chrome y actualiza la página.
Fíjate que el texto del atributo placeholder se muestra en los campos Nombre, Email y
Teléfono.
Fíjate que una vez se ha introducido un valor en el campo, ya no aparece el texto del atributo
placeholder.
Haz clic en el campo Provincia.
En este campo hemos utilizado el siguiente atributo que vamos a estudiar. Se trata del atributo
list.
Pulsa en la flecha para desplegar la lista.
Fíjate que ha aparecido una lista con valores posibles para el campo.
Sin embargo, no se trata de una lista, sino de un cuadro de texto, por lo que podríamos escribir el
nombre de la provincia en lugar de seleccionarlo de la lista e incluso utilizar un nombre que no
aparece en ella.
Fíjate que se trata de un cuadro de texto tradicional (type="text") pero que tiene el atributo list.
El valor de este atributo es el identificador de una lista que seguidamente se define con la etiqueta
<datalist>, que también es nueva en HTML5.
Como puedes ver, es muy parecido a un control <select>, pero utilizando dicha funcionalidad
con un cuadro de texto.
Y, finalmente, podemos encontrar el atributo autofocus.
Por ejemplo, la página principal del buscador Google está preparada de forma que, al
cargar la página, tome el foco el campo de búsqueda donde introducimos las palabras clave
de la búsqueda.
Con este atributo podemos hacer que tome el foco un determinado control.
Solo debe haber un control con el atributo autofocus en una página web.
Con HTML5 esto es tan sencillo como establecer el valor autofocus para dicho control. Esto no
está limitado a los controles input, también podremos utilizarlo con controles textarea o select.
Pulsa + .
Al final de la línea 15 puedes comprobar que se utiliza este atributo. Por lo tanto, al cargar la
página, el cuadro de texto Nombre es el que recibe el foco de la aplicación.
Este atributo debe utilizarse con precaución, ya que puede producir resultados indeseados. Por
ello, utilízalo únicamente cuando tenga sentido.
Además, recuerda que todas estas nuevas características están soportadas de distinta manera por
los navegadores. La especificación HTML5 da bastante libertad a la hora de la implementación.
En las líneas resaltadas encontramos una función que sirve para comprobar si el navegador admite
una determinada característica HTML5.
Sin embargo, esta librería no aporta ningún código alternativo para que los navegadores
antiguos obtengan la misma funcionalidad que no entienden del lenguaje HTML5, aunque en
el sitio web www.modernizr.com encontrarás enlaces a otros lugares donde encontrar dicho
código.
Recuerda que el elemento que creamos para probar la característica no forma parte del DOM del
documento, por lo que realmente no aparecerá de ninguna forma en la página web.
Veamos ahora cómo utilizamos esta función.
En la línea 12 podemos ver un ejemplo. En este caso se comprueba si el elemento "input"
dispone del atributo "placeholder". Para ello, se utiliza la función anterior.
En caso de que la función devuelva el valor false, se simula el resultado del atributo placeholder
de HTML5. Si el navegador es compatible con esta característica, no se hace nada, ya que será
suficiente con el código de la página web.
Pulsa + .
En las líneas 33 a 44 encontramos el código que se ejecuta al cargar la página. Por eso está
asociado con el evento load del elemento window.
En este caso se establece el valor de los atributos style y value para mostrar el texto
correspondiente en los campos de nombre, email y teléfono.
Fíjate que dicho texto se puede obtener del propio atributo placeholder de la etiqueta <input>.
Es decir, que aunque el navegador no es compatible con dicho atributo, sí que podemos obtener
su valor a través de JavaScript.
Sin entrar en mayores detalles, aquí vemos que si el navegador es compatible con la característica
HTML5, no se ejecutará ningún código JavaScript; si no es compatible, se ejecutará el código
JavaScript para simular dicha característica.
Vuelve a la pestaña formulario_pedido1.html.
Pulsa + .
Escribe:
<script src="scripts/placeholder.js"></script>
Elige Guardar del menú Archivo.
Ahora, ejecutando el correspondiente código JavaScript, obtendremos la misma funcionalidad
que con el atributo placeholder de HTML5 en un navegador antiguo.
De forma similar, actuaríamos con otras características HTML5 que queremos hacer compatibles
con los navegadores antiguos.
Sin embargo, es importante darse cuenta de que la página sigue siendo válida incluso sin esta
funcionalidad. Y es que uno de los objetivos del diseño de HTML5 es ser compatible "hacia
atrás", es decir, con aquellos navegadores que no entienden las nuevas características.
Por eso, estos navegadores interpretan como un cuadro de texto tradicional (type="text") los
controles nuevos que hemos visto durante la lección.
A medida de que los navegadores antiguos sean reemplazados por los modernos, todo este código
adicional JavaScript no será necesario.
input:invalid {
color: red;
}
input:valid {
color: green;
}
De esta forma tan sencilla estamos indicando que el color del texto de los input cuyo valor
introducido no esté bien formado sea el rojo; y que el color del texto de los que son válidos sea
el verde.
Guarda los cambios. Vuelve al navegador y actualiza la página. Haz clic en el campo Email.
Ahora vas a introducir una dirección de correo electrónica válida, pero debes fijarte en el color
del texto a medida que escribes.
Al principio aparecerá con el color rojo y, cuando ya sea una dirección válida, con color verde.
Escribe: jrodriguez@mail.com
Como has podido comprobar, el funcionamiento ha sido correcto. Recuerda que estas
pseudoclases aparecen en la versión CSS3, por lo que deberán estar soportadas por el navegador.
En el caso de que no sea así, simplemente no se mostará esta ayuda para el usuario si no la
incluimos a través de un polyfill.
Entre las novedades de HTML5 referentes a los formularios encontramos nuevos controles y
la funcionalidad de validar los datos sin necesidad de recurrir a un lenguaje adicional como
JavaScript.
Se añaden nuevos valores para el atributo type de la etiqueta <input>:
required
placeholder
list y el elemento <datalist>
autofocus