Formularios

Los formularios web son uno de los principales puntos de interacciรณn entre un usuario y un sitio web o aplicaciรณn. Los formularios permiten a los usuarios la introducciรณn de datos, que generalmente se envรญan a un servidor web para su procesamiento y almacenamiento, o se usan en el lado del cliente para provocar de alguna manera una actualizaciรณn inmediata de la interfaz (por ejemplo, se aรฑade otro elemento a una lista, o se muestra u oculta una funciรณn de interfaz de usuario).

El HTML de un formulario web estรก compuesto por uno o mรกs controles de formulario (a veces llamados widgets), ademรกs de algunos elementos adicionales que ayudan a estructurar el formulario general; a menudo se los conoce como formularios HTML. Los controles pueden ser campos de texto de una o varias lรญneas, cajas desplegables, botones, casillas de verificaciรณn o botones de opciรณn, y se crean principalmente con el elemento <input>, aunque hay algunos otros elementos que tambiรฉn hay que conocer.

Los controles de formulario tambiรฉn se pueden programar para forzar la introducciรณn de formatos o valores especรญficos (validaciรณn de formulario), y se combinan con etiquetas de texto que describen su propรณsito para los usuarios con y sin discapacidad visual.

La estructura basica de un formulario es la siguiente:

<form>
    <label>Nombre</label>
    <input>
    <button>Enviar formularios</button>
</form>

<form>

Todos los formularios comienzan con un elemento <form>, como este:

<form action="/my-handling-form-page" method="post">

</form>

Este elemento define formalmente un formulario. Es un elemento contenedor, como un elemento <section> o <footer>, pero especรญfico para contener formularios; tambiรฉn admite algunos atributos especรญficos para la configuraciรณn de la forma en que se comporta el formulario. Todos sus atributos son opcionales, pero es una prรกctica estรกndar establecer siempre al menos los atributos action y method:

  • El atributo action define la ubicaciรณn (URL) donde se envรญan los datos que el formulario ha recopilado cuando se validan.

  • El atributo method define con quรฉ mรฉtodo HTTP se envรญan los datos (generalmente get o post).

Los elementos <label>, <input> y <textarea>

Nuestro formulario de contacto no es complejo: la parte para la entrada de datos contiene tres campos de texto, cada uno con su elemento <label> correspondiente:

  • El campo de entrada para el nombre es un campo de texto de una sola lรญnea.

  • El campo de entrada para el correo electrรณnico es una entrada de datos de tipo correo electrรณnico: un campo de texto de una sola lรญnea que acepta solo direcciones de correo electrรณnico.

  • El campo de entrada para el mensaje es <textarea>; un campo de texto multilรญnea.

En tรฉrminos de cรณdigo HTML, para implementar estos controles de formulario necesitamos algo como lo siguiente:

<form action="/my-handling-form-page" method="post">
 <ul>
  <li>
    <label for="name">Nombre:</label>
    <input type="text" id="name" name="user_name">
  </li>
  <li>
    <label for="mail">Correo electrรณnico:</label>
    <input type="email" id="mail" name="user_mail">
  </li>
  <li>
    <label for="msg">Mensaje:</label>
    <textarea id="msg" name="user_message"></textarea>
  </li>
 </ul>
</form>

Nota: El atributo name es obligatorio, puesto que a la hora de enviar el formulario, es nombre de la "variable" que enviamos con la informaciรณn que hemos escrito. Si no le ponemos name ese campo no existe!!!

En el elemento <input>, el atributo mรกs importante es type. Este atributo es muy importante porque define la forma en que el elemento <input> aparece y se comporta. Para poder relacionar cada <label> con su correspondiente <input> se utiliza como se puede observar for y id.

Id es atributo que se utilizar mucho para JavaScript

Por รบltimo, pero no por ello menos importante, ten en cuenta la sintaxis de <input> en contraposiciรณn con la de <textarea></textarea>. Esta es una de las rarezas del HTML. La etiqueta <input> es un elemento vacรญo, lo que significa que no necesita una etiqueta de cierre. El elemento <textarea> no es un elemento vacรญo, lo que significa que debe cerrarse con la etiqueta de cierre adecuada.

Lo que introduzcas entre la etiquetas <textarea> sera el contenido que hay por defecto en el contenedor de texto.

El elemento <button>

El marcado de nuestro formulario estรก casi completo; solo necesitamos aรฑadir un botรณn para permitir que el usuario envรญe sus datos una vez que haya completado el formulario. Esto se hace con el elemento <button>; aรฑade lo siguiente justo encima de la etiqueta de cierre </form>:

<li class="button">
  <button type="submit">Envรญe su mensaje</button>
</li>

El elemento <button> tambiรฉn acepta un atributo de type, que a su vez acepta uno de estos tres valores: submit, reset o button.

  • Un clic en un botรณn submit (el valor predeterminado) envรญa los datos del formulario a la pรกgina web definida por el atributo action del elemento <form>.

  • Un clic en un botรณn reset restablece de inmediato todos los controles de formulario a su valor predeterminado. Desde el punto de vista de UX, esto se considera una mala prรกctica, por lo que debes evitar usar este tipo de botones a menos que realmente tengas una buena razรณn para incluirlos.

  • Un clic en un botรณn button no hace... ยกnada! Eso suena tonto, pero es muy รบtil para crear botones personalizados: puedes definir su funciรณn con JavaScript. No sirve para nvair formularios!

Nota: <input> tambien acepta este atribitu y de esta manera se comprotara como un boton:

<input type="submit" value="Enviar input">

Ejemplo

Mas elementos para formularios

Aqui tienes mass elementos que puedes implementar en to formulario para completarlo aun mas:

Fieldset

El elemento fieldset representa un conjunto de controles en un formulario (form), opcionalmente agrupados bajo un mismo nombre. Este elemento puede ser particularmente รบtil en formularios grandes, donde la legibilidad y la facilidad de acceso pueden ser mejoradas mediante la segmentaciรณn. Lo navegadores mostrarรกn normalmente un marco alrededor de los controles agrupados.

Un <fieldset> puede adicionalmente tener un tรญtulo o nombre, que puede ser provisto por el elemento legend. En tal caso, el elemento legend debe ser el primer hijo de fieldset.

<form>
  <fieldset>
    <legend>Informaciรณn personal</legend>
    <p>Nombre completo: <input type="text" name="nombrecompleto"></p>
    <p>Direcciรณn: <input type="text" name="direccion"></p>
    <p>Telรฉfono: <input type="tel" name="telefono"></p>
  </fieldset>

Meter

El elemento meter representa una medida dentro de un rango conocido. Este elemento, nuevo en HTML5, puede ser รบtil para representar medidas en diferentes situaciones, como uso de disco, memoria o ancho de banda, los resultados de un encuesta, la cantidad recaudada en una colecta, el nรบmero de registros coincidentes en una consulta, etc.

Esta etiqueta se estbalce con una serie de atributos:

  • min y max representan los lรญmites inferior y superior del rango.

  • low y high ayudarรกn a los autores a definir segmentos (desde los mรกrgenes) que contendrรกn valores considerados como bajos y altos respectivamente

  • optimal indicarรก cuรกl es el valor รณptimo en esta medida

  • value representa el valor tomado por esta medida

Si los atributos min y max no son declarados en este control, los lรญmites de esta medida serรกn los predeterminados 0 (lรญmite inferior) y 1 (lรญmite superior)

progress

El elemento progress representa el estado de progreso de una operaciรณn, como ser la transferencia de un archivo, una codificaciรณn o la recuperaciรณn de valores desde una base de datos. Este control es normalmente representado por una barra de progreso, compuesta por un contenedor que es llenado de izquierda a derecha de acuerdo con el progreso de la operaciรณn.

Una barra progress puede representar un progreso en dos estados: como indeterminado, indicando que el proceso estรก siendo llevado a cabo pero no existe informaciรณn acerca de su estado de completitud; o como un valor que indica la cantidad de trabajo que ha sido realizado en la tarea.

Los autores no deben confundir este elemento con meter. A diferencia de meter, el elemento progress mide รบnicamente la completitud de una tarea.

<p>Progreso: <progress max="100" value="20"></progress></p>

Last updated