11. Formularios

  1. Estructura de un formulario. La etiqueta <form>
  2. Tipos de controles
  3. La etiqueta <input>
  4. Introducir textos. <textarea>
  5. Menús desplegables. <select>, <option> y <optgroup>
  6. Botones. <button>
  7. Estructurar los formularios. <fieldset> y <legend>

Estructura de un formulario. La etiqueta <form>

Los formularios son elementos que permitirán al visitante interactuar con nuestra página.

Los formularios interpretan las acciones que una persona realiza sobre nuestra página y obtiene en consecuencia determinada respuesta. El proceso de estos datos se realiza mediante un programa ejecutable CGI o de lenguaje de script (PERL, ASP, etc.) en el ordenador de nuestro servidor. Este tipo de programas se escapa al nivel pretendido en estas lecciones por lo que no lo veremos aquí.

Lo que sí podremos hacer de forma inmediata, y sin necesidad de conocer estos lenguages de programación, es pedir información al visitante y que esta información sea enviada a nuestra cuenta de correo electrónico. Esto sólo será posible si el visitante dispone en su ordenador de un programa de correo, por ejemplo el Outlook de Microsoft, y a través de éste se enviará la información solicitada.

La etiqueta que define un formulario es <form>. Su estructura y sus atributos son los siguientes:

<form action="programamethod="método">
  ...elementos del formulario...
  ...botones para enviar los datos...
</form>
action="programa" Indica la dirección del programa que se ejecutará para procesar los datos.
En el caso de que queramos enviar los datos a una dirección de correo, por ejemplo tutorialhtml@terra.es, escribiremos:
action="mailto:tutorialhtml@terra.es"
method="get|post" Indica el método que se utilizará para enviar los datos del formulario. Los valores posibles son get (por defecto) y post.
En el caso de que queramos enviar los datos a una dirección de correo utilizaremos method="post".
enctype="tipo de datos" Indica el tipo de datos. Los valores más usuales son:
text/plain
El resultado del formulario se envía como texto plano sin ningún formato y es el formato adecuado para enviar por e-mail con action="mailto:dirección"
application/x-www-form-urlencoded
Es el valor por defecto, algo ininteligible
multipart/form-data
Es el formato adecuado para enviar ficheros adjuntos
name="nombre" Indica el nombre del formulario para futuras referencias con rutinas de scripts.

En resumen la etiqueta <form> actua en primer lugar como contenedor de los elementos del formulario y en segundo lugar indica la acción a desarrollar con el mismo.

Arriba

Tipos de controles

En Html podemos crear los siguientes tipos de controles:

Control Explicación
Botones (buttons)
Son controles que realizan una determinada acción al pulsarlos. Hay tres tipos de botones:
  • Botones de envío (submit buttons): Al pulsarlo se envía un formulario.
  • Botones de reinicialización (reset buttons): Al pulsarlo se reinicializan todos los controles a sus valores iniciales.
  • Botones pulsadores (push buttons): Los botones pulsadores no tienen un comportamiento por defecto. Cada botón pulsador puede tener asociados scripts a través del atributo event del elemento. Cuando ocurre un evento (p.ej., el usuario aprieta el botón, lo suelta, etc.), se acciona el script asociado.
Los botones se crean con la etiqueta <button> o con <input>, aunque es más recomendable utilizar la primera.
Casillas de verificación (checkboxes)
Marca la casilla
Las casillas de verificación (y los radiobotones) son interruptores de encendido/apagado que pueden ser conmutados por el usuario.
Para crear un control de casilla de verificación se utiliza la etiqueta <input>.
Radiobotones (radio buttons)
Blanco
Negro
Los radiobotones son como las casillas de verificación, excepto en que cuando varios comparten el mismo nombre de control, son mutuamente exclusivos, es decir, cuando uno está "encendido", todos los demás con el mismo nombre se "apagan". Para crear un control de radiobotón se usa la etiqueta <input>.
Menúes (menus)
Los menúes ofrecen al usuario opciones entre las cuales elegir. Se crean con la etiqueta <select> en combinación con <optgroup> y <option>.
Entrada de texto (text input)
Podemos crear dos tipos de controles que permiten a los usuarios introducir textos. Con la etiqueta <input> se crea un control de entrada de una sola línea, y con <textarea> un control de entrada de varias líneas.
selección de ficheros (file select)
Este control permite al usuario elegir ficheros de modo que sus contenidos puedan ser enviados con un formulario. Para crear un control de este tipo se usa la etiqueta <input>.
Controles ocultos (hidden controls) Podemos crear controles que no se muestran pero cuyos valores se envían con un formulario. Este tipo de controles se usan normalmente para almacenar información entre intercambios cliente/servidor que de otro modo se perdería. Para crear un control de este tipo se usa la etiqueta <input>.
Arriba

La etiqueta <input>

La etiqueta <input> es la que controla la mayoría de los posibles controles de un formulario en Html. El tipo de control lo indicaremos mediante el atributo type.
Esta etiqueta no lleva etiqueta de cierre. Veamos como se usa y sus atributos:

<input type="tipo de control">
type="tipo de control" Este es el atributo obligatorio que indica el tipo de control. Sus valores posibles son:
ValorExplicación
text Crea un control de entrada de texto de una línea.
password Igual que text, pero el texto introducido se presentan de tal modo que se oculten los caracteres, normalmente mediante asteriscos. Este tipo de control suele utilizarse para datos importantes tales como contraseñas.
checkbox Crea una casilla de verificación o checkbox.
radio Crea un radiobotón o radio button.
submit Crea un botón de envío o submit button que enviará los valores del formulario al pulsar en él.
image Crea un botón de envío gráfico con una imagen.
reset Crea un botón de reinicialización o reset button que volverá a los valores iniciales del formulario.
button Crea un botón pulsador o push button.
hidden Crea un control oculto o hidden control.
file Crea un control de selección de fichero o file select.
name="nombre" Indica el nombre del control para futuras referencias, por ejemplo, con JavaScript.
tabindex="número" Al rellenar un formulario podemos pasar de un control a otro con la tecla TAB. Este atributo indica el orden en el que pasaremos por los controles.
accesskey="tecla" Indica la tecla de acceso rápido para acceder a este control. En los navegadores más usuales se accede pulsando la tecla Alt más la tecla indicada en este atributo.

El resto de atributos dependen del tipo de control por lo que los estudiaremos por separado para los distintos tipos:

<input type="text">
<input
type="password">
value="valor" Indica el valor inicial del control, es decir, el contenido del cuadro de texto.
size="número" Indica la anchura inicial del control en número entero de caracteres.
maxlength="número" Indica el número máximo de caracteres que se pueden introducir. El valor por defecto para este atributo es un número ilimitado.
readonly Indica que el valor de este control no podrá modificarse.
Prueba los siguientes ejemplos
Ejemplo text

Nombre
Código

Nombre<br>
<input type="text" name="ejemplo" value="- escribe aquí -">
Ejemplo password

Contraseña
Código

Contraseña<br>
<input type="password" name="ejemplo" size="4" maxlength="4">

<input type="checkbox">
<input
type="radio">
name="nombre" Para crear un grupo de controles tipo radio excluyentes entre sí han de tener todos ellos el mismo atributo name.
value="valor" Indica el valor del control. Este valor no será visible pero es el que se enviará con el formulario y por este motivo es obligatorio indicarlo siempre. El rótulo que acompaña a estos controles deberá escribirse a continuación, fuera de la etiqueta.
checked Indica que este control está seleccionado inicialmente.
Prueba los siguientes ejemplos
Ejemplo checkbox

Marca la casilla
Casilla
Código

Marca la casilla<br>
<input type="checkbox" name="ejemplo" value="marcador"> Casilla
Ejemplo radio

Escoge un color
Rojo
Amarillo
Verde
Código

Escoge un color<br>
<input type="radio" name="ejemplo" value="rojo" checked> Rojo<br>
<input type="radio" name="ejemplo" value="amarillo"> Amarillo<br>
<input type="radio" name="ejemplo" value="verde"> Verde

<input type="submit">
<input
type="reset">
<input
type="button">
value="valor" Indica el valor del control, que en el caso de botones es el texto del botón.
onClick="evento" Los controles tipo button no hacen nada por lo que se les debe asignar una acción, normalmente con el atributo onClick que se activa al pulsar sobre el botón.
Prueba los siguientes ejemplos
Ejemplo submit

Código

<input type="submit" name="ejemplo" value="Enviar">
Ejemplo reset

Código

<input type="reset" name="ejemplo" value="Restablecer">
Ejemplo button

Código

<input type="button" name="ejemplo" value="Pulsa" onClick="alert(′Muy bien, has pulsado el botón′)">

<input type="image">
src="imagen" Indica el archivo de imagen que mostrará el botón.
alt="texto" Indica un texto alternativo del mismo modo que en la etiqueta <img>.
usemap="#mapa" Funciona como el atributo del mismo nombre de la etiqueta <img>.
Prueba el siguiente ejemplo
Ejemplo

Código

<input type="image" name="ejemplo" src="recursos/boton.gif" alt="Pulsa para enviar">

<input type="hidden">
value="valor" Indica el valor del control. Este control no es visible pero su valor se enviará con el formulario. La única manera de cambiar su valor es mediante eventos de script.

<input type="file">
size="número" Indica la anchura inicial del control en número entero de caracteres.
accept="tipo" Indica el tipo de archivos admitidos. Por ejemplo, para texto plano si formato indicaremos accept="text/plain", para enviar imágemes admitidas en html indicaremos accept="image/gif,image/jpeg,image/x-png".
Prueba el siguiente ejemplo
Ejemplo

Código

<input type="file" name="ejemplo" size="10" accept="image/gif">

Para entender todo esto un poco más veamos un ejemplo de formulario con los controles conocidos:

Código
<form action="mailto:tutorialhtml@terra.es" method="post" name="miformulario" enctype="text/plain">
Escribe tu nombre: <input type="text" name="Nombre" size="30" maxlenght="30">
Introduce tu contraseña: <input type="text" name="contraseña" size="5" maxlenght="5">
Envíame una foto tuya: <input type="file" name="mi_foto" accept="image/jpeg">
Este manual te parece:
<input type="radio" name="Me_parece" value="Muy bueno" checked> Muy bueno
<input type="radio" name="Me_parece" value="Bueno"> Bueno
<input type="radio" name="Me_parece" value="Malo"> Malo
<input type="radio" name="Me_parece" value="Muy malo"> Muy malo
<input type="checkbox" name="actualizar" checked> Avisarme de actualizaciones
<input type="submit" value="Enviar"> <input type="reset" value="Borrar">
</form>
Resultado

Escribe tu nombre:

Introduce tu contraseña:

Envíame una foto tuya:

Este manual te parece:
Muy bueno
Bueno
Malo
Muy malo

Avisarme de actualizaciones


Ejemplo de E-mail enviado con las respuestas
Nombre=Pepito Lopez
contraseña=1234
mi_foto=C:\Mis documentos\foto.jpg
Me_parece=Muy bueno
actualizar=on

Nota: Observar que de este modo no se envía la imagen adjunta, sólo la ruta. Para enviar archivos adjuntos necesitaremos especificar en el atributo action un programa cgi que procese el formulario, pero no podremos enviar archivos vía e-mail.

Actividad 11.1

  1. Al diseñar una web es muy común crear lo que se llama "Libro de visitas". En el podemos pedir a los que nos visitan sus datos y opiniones y con esto mejorar nuestra web. Esto es lo que haremos en las sucesivas actividades.
  2. Crea un nuevo archivo libro.htm con el editor de textos.
  3. Crea el siguiente formulario ajustándote al formato que tiene y a las siguientes indicaciones.
    libro.htm

    • Pseudónimo no puede tener más de 6 caracteres ni Contraseña más de 4
    • Edad, ¿Dónde vives? y Aficiones están en las tres celdas de una tabla
    • El atributo name de la etiqueta <form> debe ser miformulario
    • Cada control ha de tener un atributo name diferente. Para el nombre debe ser name="nombre", lo usaremos más adelante.
    • El formulario se debe enviar por correo a la dirección email@correo.es
  4. Guarda el archivo y ábrelo en el navegador para comprobar el resultado.

Arriba

Introducir textos. <textarea>

Para introducir textos largos en un formulario disponemos de la etiqueta <textarea>.

<textarea rows="filas" cols="columnas"> </textarea>
rows="filas"
cols="columnas"
Indica el número de filas y el número de caracteres por fila respectivamente. Estos atributos son obligatorios.
name="nombre" Indica el nombre del control para futuras referencias, por ejemplo, con JavaScript.
tabindex="número" Al rellenar un formulario podemos pasar de un control a otro con la tecla TAB. Este atributo indica el orden en el que pasaremos por los controles.
readonly Indica que el valor de este control no podrá modificarse.
accesskey="tecla" Indica la tecla de acceso rápido para acceder a este control. En los navegadores más usuales se accede pulsando la tecla Alt más la tecla indicada en este atributo.
Prueba el siguiente ejemplo
Ejemplo

Comentarios
Código

Comentarios<br>
<textarea cols="20" rows="3" name="ejemplo">- escribe aquí -</textarea>

Actividad 11.2

  1. Abre el archivo libro.htm con el editor de textos.
  2. Añade un control justo antes de los botones, de tipo área de texto y con el rótulo Escribe tus sugerencias:
  3. Guarda el archivo y ábrelo en el navegador para comprobar el resultado.

Arriba

Menús desplegables. <select>, <option> y <optgroup>

Otro tipo de controles son los menúes desplegables. Estos permiten seleccionar una o varias opciones de una lista.
Un menú desplegable se crea con la etiqueta <select> y dentro de ella crearemos cada elemento de la lista con <option>. La tercera etiqueta, <optgroup>, sirve para agrupar los elementos de la lista cuando es necesario.

Veamos como se utilizan estas etiquetas:

<select>
  <option>
Opción 1</option>
  <option>
Opción 2</option>
    ...
</select>
<select> </select> Con esta etiqueta creamos el menú desplegable donde el visitante elegirá su opción.
<option> </option> Con esta etiqueta crearemos en nuestro menú cada una de las opciones que queremos. El rótulo de cada opción se escribe entre la etiqueta de apertura y la de cierre.
Atributos opcionales para <select>
size="número" Indica el número de opciones (o filas) que serán visibles. La anchura del menú se adapta a la longitud de las opciones automáticamente, aunque si queremos ajustarla a nuestro gusto podemos usar hojas de estilo.
multiple Permite escoger más de una opción al mismo tiempo. Si no lo indicamos sólo podremos escoger una opción.
name="nombre" Indica el nombre del control para futuras referencias, por ejemplo, con JavaScript.
tabindex="número" Al rellenar un formulario podemos pasar de un control a otro con la tecla TAB. Este atributo indica el orden en el que pasaremos por los controles.
Atributos opcionales para <option>
selected Indica que está es la opción marcada por defecto. Si no se indica en ninguna de las opciones se toma la primera.
value="valor" Indica el valor inicial de la opción, es decir, el que se enviará con el formulario. Si no se indica, se enviará el rótulo entre la etiquetas de apertura y cierre.
Prueba el siguiente ejemplo
Ejemplo

Edad
Código

Edad<br>
<select name="edad">
  <option>
0 a 15</option>
  <option selected>
16 a 30</option>
  <option>
31 a 45</option>
  <option>
46 o más</option>
</select>

Actividad 11.3

  1. Abre el archivo libro.htm con el editor de textos.
  2. Añade un control justo antes de Escribe tus sugerencias, de tipo menú desplegable y con el rótulo Qué te parece esta web?
  3. Crea las opciones de menú de la imagen siguiente:
    Menú desplegable
  4. Guarda el archivo y ábrelo en el navegador para comprobar el resultado.

A menudo, y sobretodo cuando hay muchas opciones para elegir en la lista, nos puede resultar interesante agrupar las opciones para un mejor entendimiento. Esto se consigue con la etiqueta <optgroup>.
Vamos a ver como se utiliza y un ejemplo:

<select>
  <optgroup
label="grupo1">
    <option>
Opción 1.1</option>
    <option>
Opción 1.2</option>
      ...
  </optgroup>
  <optgroup
label="grupo2">
    <option>
Opción 2.1</option>
    <option>
Opción 2.2</option>
      ...
  </optgroup>
    ...
</select>
<optgroup> </optgroup> Dentro de estas dos etiquetas pondremos las opciones de este grupo.
Atributos para <optgroup>
label="nombre" Indica el nombre del grupo y es una etiqueta obligatoria pues es el texto que aparecerá en la lista.
Prueba el siguiente ejemplo
Ejemplo

Selecciona un animal:
Código

<select name="ejemplo">
  <optgroup
label="Mamíferos">
    <option>
Perro</option>
    <option>
Gato</option>
    <option>
Cerdo</option>
  </optgroup>
  <optgroup
label="Aves">
    <option>
Pollo</option>
    <option>
Pavo</option>
  </optgroup>
</select>

Actividad 11.4

  1. Abre el archivo libro.htm con el editor de textos.
  2. Añade un nuevo control justo antes de ¿Qué te parece esta web?, de tipo menú desplegable y con el rótulo Qué estudios tienes?
  3. Crea las opciones de menú de la imagen siguiente con los grupos de opciones que se indican:
    Menú desplegable
  4. Guarda el archivo y ábrelo en el navegador para comprobar el resultado.

Arriba

Botones. <button>

Los botones creados con <button> funcionan igual que los creados con la etiqueta <input type="button">. La única diferencia es que el contenido de un botón creado con <button> es lo que pondremos entre las etiquetas de apertura y cierre, pudiendo definir estilos o incluir imágenes, mientras que al crearlo con <input> sólo podremos incluir un texto mediante el atributo value.

Al igual que vimos en la etiqueta <input>, un botón no hace nada por sí sólo, sino que hemos de asignarle un evento con un lenguaje de script.

Veamos su estructura y un ejemplo:

<button>Contenido</button>
name="nombre" Indica el nombre del control para futuras referencias, por ejemplo, con JavaScript.
tabindex="número" Al rellenar un formulario podemos pasar de un control a otro con la tecla TAB. Este atributo indica el orden en el que pasaremos por los controles.
accesskey="tecla" Indica la tecla de acceso rápido para acceder a este control. En los navegadores más usuales se accede pulsando la tecla Alt más la tecla indicada en este atributo.
value="valor" Indica el valor inicial del control, que es el que será enviado con el formulario.
type="tipo" Indica el tipo de botón, que puede ser submit, reset o button. La función de cada tipo es la misma que para <input>. Por defecto se crea un botón de envío tipo submit.
onclick="evento" Los controles tipo <button type="button"> no hacen nada por lo que se les debe asignar una acción, normalmente con el atributo onclick que se activa al pulsar sobre el botón.
Prueba el siguiente ejemplo
Ejemplo

Código

<button type="button" name="ejemplo" onClick="alert(′Muy bien, has pulsado el botón′)"><span style="color: red;">Pulsa<br>aquí</span></button>

Actividad 11.5

  1. Abre el archivo libro.htm con el editor de textos.
  2. Añade un nuevo control, justo después del control donde introduces el nombre, de tipo <button type="button">
  3. Escribe Saludo entre las etiquetas de apertura y cierre con un estilo atractivo
  4. Añade un atributo onclick con el siguiente contenido:
      alert('Hola '+document.miformulario.nombre.value)
  5. Guarda el archivo y ábrelo en el navegador para comprobar el resultado.

Arriba

Estructurar los formularios. <fieldset> y <legend>

Cuando el formulario es muy extenso puede resultar útil agrupar los controles. Esto lo podemos hacer con la etiqueta <fieldset>, y podemos añadir un rótulo a cada grupo de controles con la etiqueta <legend>.

Veamos como utilizarlas y un ejemplo:

<form>
  <fieldset>
    <legend>
Rótulo primer grupo</legend>
    - controles -
  </fieldset>
  <fieldset>
    <legend>
Rótulo segundo grupo</legend>
    - controles -
  </fieldset>
    ...
</form>
<fieldset> </fieldset> Dentro de estas dos etiquetas pondremos los distintos controles que componen este grupo.
<legend> </legend> Dentro de estas dos etiquetas pondremos el rótulo de este grupo de controles.

Veamos el ejemplo de más arriba con los controles agrupados:

Código
<form action="mailto:tutorialhtml@terra.es" method="post" name="miformulario" enctype="text/plain">
<fieldset>
<legend><b>
Datos personales<b></legend>"
Escribe tu nombre: <input type="text" name="Nombre" size="30" maxlenght="30">
Introduce tu contraseña: <input type="text" name="contraseña" size="5" maxlenght="5">
Envíame una foto tuya: <input type="file" name="mi_foto" accept="image/jpeg">
</fieldset>
<fieldset>
<legend><b>
Opinión<b></legend>
Este manual te parece:
<input type="radio" name="Me_parece" value="Muy bueno" checked> Muy bueno
<input type="radio" name="Me_parece" value="Bueno"> Bueno
<input type="radio" name="Me_parece" value="Malo"> Malo
<input type="radio" name="Me_parece" value="Muy malo"> Muy malo
</fieldset>
<fieldset>
<legend><b>
Envío de datos<b></legend>"
<input type="checkbox" name="actualizar" checked> Avisarme de actualizaciones
<input type="submit" value="Enviar"> <input type="reset" value="Borrar">
</fieldset>
</form>
Resultado
Datos personales Escribe tu nombre:

Introduce tu contraseña:

Envíame una foto tuya:

Opinión Este manual te parece:
Muy bueno
Bueno
Malo
Muy malo

Envío de datos Avisarme de actualizaciones


Actividad 11.6

  1. Abre el archivo libro.htm con el editor de textos.
  2. Agrupa los primeros controles desde Datos personales hasta ¿Qué estudios tienes? con el rótulo Datos del visitante
  3. Agrupa los controles ¿Qué te parece esta web? y Escribe tus sugerencias en un grupo con el rótulo Opinión
  4. ..
  5. Agrupa los dos botones en un grupo con el rótulo Procesado de ls datos
  6. Guarda el archivo y ábrelo en el navegador para comprobar el resultado.

Arriba


Marcos Marcos Valid HTML 4.01! Publicar en Internet Publicar en Internet