jueves, 27 de octubre de 2011

Validación de un formulario con Javascript



Cómo validar un formulario en una página web, en el lado del cliente con Javascript. Se comprueban todos sus campos y si son correctos, se envía el formulario.

Vamos realizar un ejemplo de un formulario completo para validar. Las validaciones se hacen en el propio navegador antes de enviarlo. Si hubo algún campo no relleno o con información errónea, el formulario muestra el campo que está incorrecto y solicita al usuario que lo cambie. Si todos los datos del formulario son correctos se envía el formulario. 

Hemos querido hacer un formulario sencillo, para que el ejercicio no se haga demasiado complicado. No obstante, se realizan validaciones en campos con distintos valores, para hacerlo más variado. Se comprueba un campo donde debe figurar un texto, otro donde debe introducirse un número mayor que 18 y un último con un campo select donde deben haber seleccionado un valor. 

El código del formulario  El formulario con el que vamos a trabajar es el siguiente:  

<form name="fvalida">  
<table> 
<tr>     
<td>Nombre: </td>     
 <td><input type="text" name="nombre" size="30" maxlength="100"></td> 
</tr>  
<tr>    
  <td>Edad: </td>    
  <td><input type="text" name="edad" size="3" maxlength="2"></td> 
</tr>
  <tr>    
  <td>Interés:</td>     
 <td>      <select name=interes>   
   <option value="Elegir">Elegir      <option value="Comercial">Contacto comercial      <option value="Clientes">Atención al cliente    
  <option value="Proveedores">Contacto de proveedores   
   </select>      </td> 
</tr>  
<tr>      <td colspan="2" align="center"><input type="button" value="Enviar" onclick="valida_envia()"></td> 
</tr> 
</table> 
</form>  

Es un formulario cualquiera. Los únicos puntos donde debemos prestar atención son:
  • El nombre del formulario, "fvalida", que utilizaremos para referirnos al él mediante Javascript.
  • El botón de enviar, que en lugar de ser un submit corriente, es un botón que llama a una función, que se encarga de validar el formulario y enviarlo si todo fue correcto.
Función Javascript para validar el formulario   Ahora veremos la función que hemos creado para validar el formulario. Se llama valida_envia(). Simplemente, para cada campo del formulario, comprueba que el valor introducido es correcto. Si no es correcto, muestra un mensaje de alerta, pone el foco de la aplicación en el campo que ha dado el error y abandona la función retornando el valor 0.  Si todos los campos eran correctos, la función continúa hasta el final, sin salirse, por no estar ningún campo incorrecto. Entonces ejecuta la sentencia última, que es el envío del formulario.  Veamos la función entera, aunque luego la expliquemos por partes.  

function valida_envia(){      //valido el nombre     
if (document.fvalida.nombre.value.length==0){        
 alert("Tiene que escribir su nombre")        
 document.fvalida.nombre.focus()         return 0;     
}
      //valido la edad. tiene que ser entero mayor que 18    
  edad = document.fvalida.edad.value     
 edad = validarEntero(edad)    
  document.fvalida.edad.value=edad    
  if (edad=="")
       alert("Tiene que introducir un número entero en su edad.")    
     document.fvalida.edad.focus()    
     return 0;     
}
else
       if (edad<18)
         
 alert("Debe ser mayor de 18 años.")         
   document.fvalida.edad.focus()         
   return 0;         }    
  }     
 //valido el interés     
 if (document.fvalida.interes.selectedIndex==0)
       alert("Debe seleccionar un motivo de su contacto.")    
     document.fvalida.interes.focus()       
  return 0;     
 
   //el formulario se envia    
  alert("Muchas gracias por enviar el formulario");  
    document.fvalida.submit(); 
 

En el primer bloque se valida el campo nombre. La validación que se hace es simplemente si se ha escrito algo en el campo. Para ello comprueba si el número de caracteres escritos en el campo nombre es cero. En ese caso, muestra el mensaje de alerta, sitúa el foco en el campo de texto y se sale de la función devolviendo el valor 0. 

Nota: el foco de la aplicación es el lugar donde está situado el cursor. El foco puede estar en cualquier sitio. Por ejemplo en un campo de texto, en un select, en un enlace o en la propia página. Si presionamos una tecla del teclado afecta al lugar donde está situado el foco. Si, por ejemplo, el foco está en un campo de texto, al operar con el teclado estaremos escribiendo en ese campo de texto.

La validación de la edad mayor que 18 años tiene dos partes. Primero debemos comprobar que en el campo de texto hay escrito un valor entero. Luego, si teníamos un entero, habría que comprobar que es mayor que 18. Para hacer esta validación nos vamos a apoyar en una función que ya hemos visto en otro artículo de DesarrolloWeb.com, que habla sobre cómo validar un entero en un campo de formulario. Esa función devuelve un string vació en caso de que no sea un entero y el propio entero, si es que lo era. 

Antes de realizar la validación de la edad propiamente dicha, se obtiene el valor introducido en el campo de formulario edad y se guarda en una variable llamada edad. Luego se ejecuta la función pasando esta edad. Su resultado lo utilizamos para volcarlo otra vez al campo de texto. Entonces, se comprueba si el valor devuelto por la función es un string vacío. En ese caso, es que el valor escrito en el formulario no era un entero, por lo que se muestra el mensaje de error, se sitúa el foco y se sale de la función. 

En caso de que el campo edad contuviese un entero, se debe comprobar a continuación si es mayor que 18. En caso de que sea menor, se muestra el error y se sale. En caso contrario -entonces el valor sería mayor o igual que 18-, se continúa con las comprobaciones. 

Por último se valida el campo select, donde aparece el interés del supuesto visitante, que le motiva para enviarnos el formulario. En ese campo se debe haber seleccionado cualquier opción menos la primera. Para asegurarnos, simplemente se comprueba si el atributo selectedIndex del campo select tiene el valor 0. Ese atributo almacena el índice seleccionado en el menú desplegable. El primer campo tiene el índice 0, el segundo el índice 1... 

Si se comprueba que selectedIndex vale 0, se muestra un mensaje de alerta, se pone el foco en el campo del formulario y se sale de la función. 

Si hemos llegado hasta este punto sin salirnos de la función es que todos los campos del formulario estaban rellenos correctamente. En ese caso se debe enviar el formulario. Antes de enviar el formulario se muestra un mensaje de alerta, agradeciendo que se haya rellenado correctamente. Este mensaje se puede suprimir si se desea. 

Para enviar el formulario se hace una llamada al método submit() de dicho formulario. 

Conclusión   Este ejercicio es de lo más básico y útil que se puede hacer en Javascript. Requiere ciertos conocimientos, ya ligeramente avanzados, pero en el fondo no resulta complicado. Incluso ampliarlo es bastante sencillo, siempre que sigamos un esquema similar para cada uno de los campos. 

Validación de campos de formulario con JavaScript

1. Introducción

Una de las grandes aportaciones de JavaScript a la creación de interfaces web es la posibilidad de acceder al contenido de los campos de los formularios para realizar acciones sobre los valores introducidos por el usuario, modificarlos y, en última instancia, validarlos. La validación de los datos de un formulario mediante scripts JavaScript no sustituye a la validación que debe realizarse, por motivos de seguridad, en la aplicación del servidor que recibe la información. Sin embargo, al añadir una validación local con JavaScript, la experiencia de usuario mejora notablemente, al no ser necesario enviar los datos al servidor y esperar su respuesta para obtener sólo un mensaje informando de la incorrección de la información suministrada. Resulta frustrante complementar un formulario, pulsar el botón enviar, y esperar 30 o 40 segundos para saber que hemos introducido mal un campo JavaScript, desde sus comienzos, introdujo los mecanismos necesarios para validar campos de formulario. Estas son algunas de las validaciones típicas:
  • Comprobar que se han suministrado todos los campos obligatorios
  • Comprobar que el formato de un campo es el esperado (fechas, teléfonos, etc.)
  • Comprobar la validez (sintáctica) de las direcciones de correo y URLs
  • Comprobar que no se sobrepasa la longitud, número de líneas o tamaño de la entrada
La siguiente guía ayuda a entender el funcionamiento de la validación de formularios con JavaScript, y enlaza con numerosos ejemplos de nuestra sección de código que pueden ser utilizados de modelo para crear la validación deseada.

2. Evento onSubmit

La validación de campos de formulario se basa en interceptar el momento en que el usuario realiza el envío de los datos del formulario (es decir, pulsa sobre el botón de enviar). Como es sabido, el botón de envío de datos se codifica con HTML mediante un tipo especial de objeto de formulario, llamado submit. El siguiente ejemplo muestra un formulario con un botón de envío:
<form name="miFormulario" action="mailto:mi@mail.com">
<input type="submit" value="Enviar" name="enviar">
</form>
Cuando el usuario pulsa sobre el botón, el navegador ejecuta la acción codificada en el parámetro action del formulario. En el ejemplo anterior, hemos incluido una acción de tipo mailto:, es decir, de envío de datos por correo electrónico. Lo normal es que la acción sea la invocación de un programa que se ejecuta en el servidor remoto, y que recibe los datos de acuerdo a la especificación CGI (Common Gateway Interface). Para ampliar la información sobre esta interfaz, consulta nuestro tutorial ¿Pero qué es eso de los CGIs?
Cuando el usuario pulsa sobre el botón de enviar, se genera el evento submit, asociado al envío de datos de un formulario. JavaScript proporciona un mecanismo para capturar este evento, lo que nos permite ejecutar un script justo antes de que se realice el envío de los datos.
La forma de capturar el evento consiste en introducir el atributo onSubmit en la etiqueta del formulario cuyo evento submit queremos capturar. De esta forma, para capturar el evento submit del formulario del ejemplo anterior escribiríamos:
<form name="miFormulario" action="mailto:mi@mail.com"
onSubmit="alert('Has pulsado enviar.'); return false;">
<input type="submit" value="Enviar" name="enviar">
</form>
En esta nueva versión del formulario, al pulsar sobre el botón de envío se ejecutará el código incluido como valor del atributo onSubmit. En este caso, se trata de un simple alert() JavaScript informando de que se ha pulsado sobre el botón de envío. Puede comprobarse el funcionamiento pulsando sobre el siguiente botón:
El código JavaScript que se ejecuta antes del envío del formulario es, en el ejemplo anterior, un alert(). Sin embargo, se puede observar que se ha añadido un return false al final de la línea de código. Esta es la forma de indicar al navegador si la validación ha sido correcta o incorrecta. Si el código JavaScript (normalmente una función de validación) del atributo onSubmit devuelve false, la validación es incorrecta y el navegador no continúa con el envío del formulario tras ejecutar dicho código. Por el contrario, si devuelve true la validación es correcta y el formulario se envía normalmente.
Podemos modificar el ejemplo anterior para devolver true tras mostrar el alert-box. El ejemplo siguiente permite comprobar lo que sucede en ese caso. Se abrirá el cliente de correo por defecto para iniciar el envío de un mensaje de correo a la dirección suministrada como mailto: en el atributo action.

3. El objeto this

Normalmente, el evento onSubmit ejecuta una función de validación, como en el siguiente ejemplo:
<form name="miFormulario" action="mailto:mi@mail.com"
onSubmit="return Valida(this);">
<input type="submit" value="Enviar" name="enviar">
</form>
Esta función devolverá, como ya se ha dicho, true si la validación es correcta, y false en caso contrario. Para poder realizar la validación, la función debe trabajar sobre los objetos del formulario a validar, para acceder a su valor y evaluarlo. Esto se consigue pasándole como parámetro el objeto this, que referencia en este contexto al formulario desde el que se invoca la función.
La función de validación accederá a los campos del formulario a partir del objeto this. A continuación mostramos un ejemplo sencillo, en el que se comprueba si el valor del campo de nombre campo1 es igual a OK. En caso afirmativo, la validación es correcta:
function Valida( formulario ) {
  if (formulario.campo1.value == 'OK') {
    return true
  } else {
    return false
  }
}

4. Ejemplos

A continuación mostramos referencias a múltiples ejemplos prácticos de validación de formularios con JavaScript, que pueden servir para entender mejor los conceptos explicados en los párrafos anteriores:

4.1. Validacion de campos de texto no vacios

El ejemplo de Validacion de campos de texto no vacios muestra cómo acceder a un campo de texto para recorrerlo carácter a caráter verificando que no está vacío y que no contiene sólo caracteres en blanco.

4.2. Validación de campos de fecha

El script de Validacion de campo fecha es un ejemplo de validación de un campo que tiene que ajustarse a un formato determinado (en este caso el formato fecha d-m-aaaa).

4.3. Validación de campos de hora

El script de Validación de campos de hora tiene la particularidad de utilizar en la validación expresiones regulares, lo que simplifica enormemente el código.

4.4. Validación de campos de longitud fija

Una de las comprobaciones típicas sobre campos de formulario se refiere al número de caracteres introducidos (para verificar que no supera cierto valor, o que es exactamente igual a cierto número). Esta comprobación es útil, por ejemplo, para números de teléfono, códigos postales o para números de identificación (como el DNI). El ejemplo Validación de campos de longitud fija muestra cómo hacerlo con expresiones regulares.

4.5. Validación de campos de correo electrónico

La Validación de campos de correo electrónico es una de las más necesarias, ya que muchos de los formularios que se utilizan en Internet solicitan este dato. Esta validación es puramente sintáctica (es decir, se comprueba que el formato está de acuerdo con la RFC 821 de la mensajería electrónica de Internet), no siendo posible comprobar que la dirección exista realmente.

4.6. Validación de campos sin usar expresiones regulares

Para quienes no dominen las expresiones regulares de JavaScript, pero quieran implementar una función de validación a medida, el ejemplo Validación de campos sin usar expresiones regulares les permitirá seleccionar los caracteres válidos e introducirlos en una variable alfanumérica que se utilizará después para la validación.

4.7. Validación de campo vacío, email y URL

El ejemplo de Validación de campo vacío, email y URL es otro script de validación que no utiliza expresiones regulares, y que muestra cómo se realiza la validación de campos de correo electrónico y de URLs.

viernes, 21 de octubre de 2011

Poner fondo a cualquier elemento con CSS


Sin CSS estábamos limitados a poner colores e imágenes de fondo solo en el cuerpo de la web y en tablas. Ahora con CSS, podemos aplicar tanto una imagen de fondo como un color de fondo a prácticamente cualquier elemento de nuestra web.

Lo más sencillo es poner un color de fondo, por ejemplo, si tenemos un texto marcado en negrita y queremos ponerle un color de fondo azul haremos:

<strong style="background-color: #3333FF">Texto en negrita</strong>

Pero no estamos limitados a un color de fondo, también podemos poner una imagen:

<strong style="background-image: url(imagen.jpg)">Texto en negrita</strong>

Para que funcione este código el archivo "imagen.jpg" debe estar en el mismo directorio que el archivo .html.

También podemos manipular el fondo, podemos hacer que esté alineado a la izquierda y que no se repita. Aunque esto lo probaremos en una celda, para poder verlo mejor:

<table>
<tr>
<td height="50" style="background-image: url(imagen.jpg); background-repeat: no-repeat; background-position: left;">Fondo</td>
</tr>
</table>

El fondo no se repetirá y estará alineado a la izquierda. Todo lo que hemos visto aquí también lo podemos aplicar a campos de un formulario o a cualquier otra etiqueta.

Personalizando las barras de scroll del navegador en CSS



A partir de la version 5.5 el navegador de internet mas utilizado en el mundo "Internet Explorer" soporta la personalizacion de sus barras de scroll, mediante hojas de estilo podemos obtener barras realmente atractivas, aqui un ejemplo...

css

Estas barras siguen funcionando igual que las anteriores lo unico que se modifica es su aspecto, veamos como llegamos a esto...

<style type="text/css">
<!--
body {
SCROLLBAR-FACE-COLOR:#6699CC; 
SCROLLBAR-HIGHLIGHT-COLOR: #6699CC; 
SCROLLBAR-SHADOW-COLOR: #6699CC; 
SCROLLBAR-3DLIGHT-COLOR: #FFFFFF;
SCROLLBAR-ARROW-COLOR: #FFFFFF; 
SCROLLBAR-TRACK-COLOR: #E3E3E3; 
SCROLLBAR-DARKSHADOW-COLOR: #000000;
}
-->
</style>

Este codigo hay que insertarlo entre las etiquetas HEAD o en la hoja de estilo que utilizemos, ahora explicaremos que significa cada item...

  • SCROLLBAR-FACE-COLOR - Color de la base de la barra
  • SCROLLBAR-HIGHLIGHT-COLOR - Color resaltado de la barra
  • SCROLLBAR-SHADOW-COLOR - Color de la sobra de la barra
  • SCROLLBAR-3DLIGHT-COLOR - Color del relieve de la barra
  • SCROLLBAR-ARROW-COLOR - Color de las flechas de la barra
  • SCROLLBAR-TRACK-COLOR - Color del fondo de la barra
  • SCROLLBAR-DARKSHADOW-COLOR - Color de la sobra mas oscura de la barra

Es complicado explicar cada item, lo que te recomiendo es que vayas cambiando los valores de los colores y que pruebes como va quedando.

Filtro para invertir CSS


Filtro de imágenes mediante CSS: Flip 

Este es un efecto curioso. Permite mostrar imágenes y texto invertidos horizontal o verticalmente.... ¿Quieres ver Google del revés?

Aplicar este filtro es muy sencillo ya que no posee parámetros. Para aplicarlo a una imagen sólo debemos insertar el siguiente código en nuestra página

<img src="miimagen.gif" style="FILTER: FlipH">

En este caso la imagen aparecería invertida horizontalmente (FlipH) si deseamos que aparezca invertida verticalmente deberemos substituir FlipH por FlipV

¿Como conseguimos girar la imagen horizontal y verticalmente a la vez?.

Para ello hemos creado una tabla en la que cada imagen ocupa una celda y en la celda inferior derecha hemos aplicado el filtro FlipH y a su vez a la imagen contenida en esa celda le aplicamos el filtro FlipV con lo que conseguimos dos inversiones:

<td style="Filter: FlipH"><img src="miimagen-gif" style="FILTER: FlipV"></td>

Este efecto también puede aplicarse a un texto (tanto FlipH como FilpV). Sólo hay que tener en cuenta que en el estilo tambien debemos definir el ancho es decir que esto:

<P style="width: 300px; Filter: FlipH">Este es un texto escrito
como normalmente se escriben los textos y
nuestros teclados lo permiten, pero se visualiza
invertido horizontalmente. Vamos que es un lío
intentar leerlo.</P>

Enlaces que simulan botones en CSS


Hacer un botón con CSS sin utilizar formularios, simplemente con enlaces que se comportan visualmente como botones.

En este taller de CSS vamos a mostrar cómo realizar un enlace que tenga aspecto de botón. Dicho de otra manera, vamos a crear botones a partir de enlaces, aplicando una hoja de estilo que hará que los enlaces se muestren de forma similar a como serían los botones. Para ello, vamos a hacer que, al pasar el ratón por encima de un enlace, este parezca como que está pulsado.

El código HTML

Vamos a partir básicamente de un enlace, al que asignaremos una clase definida con CSS. Como los estilos los vamos a aplicar con CSS, el enlace es tan sencillo como este:
<a href="#" class="enlaceboton">Hola!!</a>

El código CSS

Vamos a definir la clase "enlaceboton", que es el estilo que se ha asignado para el enlace. Como sabemos, los enlaces tienen diferentes estados (visitados, no visitados, o con el cursor del ratón por encima), así que tendremos que definir el estilo para cada estado.

.enlaceboton { font-family: verdana, arial, sans-serif;
font-size: 10pt;
font-weight: bold;
padding: 4px;
background-color: #ffffcc;
color: #666666;
text-decoration: none;
}
.enlaceboton:link,
.enlaceboton:visited {
border-top: 1px solid #cccccc;
border-bottom: 2px solid #666666;
border-left: 1px solid #cccccc;
border-right: 2px solid #666666;
}
.enlaceboton:hover {
border-bottom: 1px solid #cccccc;
border-top: 2px solid #666666;
border-right: 1px solid #cccccc;
border-left: 2px solid #666666;
}

En principio, con la clase .enlaceboton se han definido estilos para cualquier estado del enlace. Después, para los diferentes estados del enlace se han definido sus correspondientes estilos, que son el mismo para los estados visitado y no visitado y diferentes para el estado hover, que es el que se aplica cuando está el ratón sobre el enlace.

Colores en CSS


Background y colores de fondo

En código HTML, el fondo se lo aplicamos dentro del <BODY> mediante los atributos bgcolor y background para asignar al fondo una imagen gif o jpg.

Las especificaciones de las CSS introducen importantes novedades respecto a los colores a aplicar en las páginas web.

Atributo color

El atributo color define el color del texto del documento (no se debe confundir con el color de background) tanto mediante los nombres de los colores en inglés: black, silver, gray, white, red, blue, etc) y con los códigos hexadecimales.

Atributo background-color , background-imagen

Este atributo de background-color determina el color de fondo, el atributo background-image, tiene una función similar al background="imagen.gif" de HTML clasico, invocando una imágen en formato GIF o JPG cargada en la css.

El atributo background-repeat, permite repetir la imágen de fondo tal y como sucede con la marca BODY de HTML
.
Puede asumir distintos valores:

  • repeat, la imágen se replica en vertical y horizontal.
  • repeat-x, replica la imágen sólo en horizontal.
  • repeat-y, replica la imágen sólo en vertical.