Valida formularios con jQuery

Cuando tenemos que validar los datos de un formulario podemos recurrir a Javascript y crear nuestra función de validación, pero también podemos recurrir a jQuery para validar el formulario de forma rápida y sencilla.

Para esto descargarmos jQuery y el plugin Validate.

Pasos previos

En el header del archivo que contiene el formulario añadimos:

<script src="jquery.js" type="text/javascript"></script> <script src="jquery.validate.js" type="text/javascript"></script>

A continuación añadimos:

<script type="text/javascript"><!--
$().ready(function() {
$("#formulario").validate();
});
// --></script>

Para distinguir el formulario al que se le aplica la validación, jQuery busca el que tenga por id formulario. Podemos cambiar #formulario por #loquesea, siendo loquesea la id del formulario.

El código HTML del formulario puede ser una cosa así:


<form id="formulario" method="post"> Nombre:
<label></label>

<input id="nombre" name="nombre" type="text" />Contraseña:
<label></label>

<input id="pass_1" name="pass_1" type="password" />Repite contraseña:
<label></label>

<input id="pass_2" name="pass_2" type="password" />Email:
<label></label>

<input id="email" name="email" type="text" /><label></label>

<input id="button" name="button" type="submit" value="Enviar" /> </form>

Ahora tenemos que definir qué campos necesitan validación, para ello disponemos de dos métodos:

  1. Ponerle una clase específica a cada input, por ejemplo, class=”required” harí que el campo fuese obligatorio.
  2. Definir los campos que requieres validación y qué tipo de validación requieren en el código Javascript que hemos añadido al principio.

El método de las clases

Comencemos por el primer método: añadiendo clases a los campos del formulario.

Si queremos que todos los campos sean obligatorios basta con añadirles a todos class=”required”, ahora si dejamos en blanco un campo con esta clase nos mostrará un aviso.

Si le ponemos de clase “email”, buscará la estructura de una dirección de correo electrónico, en casi de no ser una estructura correcta (nombre@dominio.nnn), mostrará un aviso.

Podríamos dejar así el formulario anterior:


<form id="formulario" method="post"> Nombre:
<label></label>

<input id="nombre" class="required" name="nombre" type="text" />Contraseña:
<label></label>

<input id="pass_1" class="required" name="pass_1" type="password" />Repite contraseña:
<label></label>

<input id="pass_2" class="required" name="pass_2" type="password" />Email:
<label></label>

<input id="email" class="required email" name="email" type="text" /><label></label>

<input id="button" name="button" type="submit" value="Enviar" /> </form>

El método de la definición

El segundo método es un poco más complejo. Volvemos al punto en el que añadimos:

<script type="text/javascript"><!--
$().ready(function() {
$("#formulario").validate();
});
// --></script>

Ahora en lugar de esto debemos añadir:

<script type="text/javascript"><!--
$().ready(function() {
$("#formulario").validate({
rules: {
pass_2: {
required: true,
equalTo: "#pass_1"
}
}
});
});
// --></script>

¿Cómo funciona?

Bien, después de rules:{ añadimos el id del campo de nuestro formulario seguido de las reglas que debe cumplir.

En este ejemplo el campo pass_2 es obligatorio, y además debe ser igual a pass_1, si no lo es mostrará un aviso.

Podemos añadir más reglas, como caracteres máximos, rango de caracteres (sólo para número enteros), fechas, etc, podéis ver una lista de todas las reglas aquí.

Ambos métodos son compatibles, podemos usar los dos en el mismo formulario.

Cualquier duda que tengáis no dudéis en preguntarla en los comentarios, espero que os sea útil.

Hay un total de 14 comentarios y 0 pingbacks / trackbacks.

cesar

Hola interesante el aporte podrias poner todas las funciones de la

Excelente aportación!. Es justo lo que necesitaba!
Un saludo!. :-)

jhony penagos

(Y) hola amigo, tengo una duda. necesito enviar los datos a BD, pero el evento del boton para enviar lo controlo con jquery, entonces necesito saber como hago para saber si la validacion es true o false para asimismo proceder a enviar los datos … ?? gracias men

    Respondiendo a jhony penagos

    Controlando el evento de pulsar el botón enviar supongo que deberías usar AJAX, disculpa que no sea más específico, pero es que no sabría decirte cómo hacerlo.

    Yo optaría por usar el método de clases CSS que hay explicado en el artículo y dejaría que el botón de enviar el formulario funcionase como de costumbre, de modo que la página de destino del formulario reciba los datos validados y los pueda añadir a la DB.

GokuH

Muy buen tutorial! me sirvio para comenzar y guiarme en adelante,
para jhony penagos:
el siguiente metodo : $(“#formulario”).valid() te devuelve si el formulario esta valido o no!.
Agregar que si se esta usando un formulario con AJAX seria bueno agregar este metodo para validad el click directamente:
$jq(‘:submit’).click(function(e) {
if ($(“#datosUsuario”).valid()){
console.log (‘Es Valido’);
} else {
console.log (‘no es valido’);
return false;
}
});
Como pueden observar si es valido simplemente no hace nada porque el comportamiento por defecto es realizar el submit, en cambio si no es valido simplemente no permite el submit, aki bien podrian agregar un mensaje o dejar el comportamiento por defecto del plugin que es mostrar un etiketa al rededor del campo con el error.

ZoiX

Gracias por el tutorial.
¿Sabes cómo añadirle CSS a las alertas? Me salen en negro y no me gustan :(

    Respondiendo a ZoiX

    Creo que las alertas tienen como como clase “error”, así que algo como label.error { } o .error { } directamente deberían de darle estilo.

Franklyn Ortega

Excelente Aporte, alguien sabe como personalizar los mensajes de error? a mi me salen en ingles…

    Respondiendo a Franklyn Ortega

    La verdad es que aún no he usado este script en ningún proyecto, pero revisando las demos he encontrado el siguiente código que puede darte una idea de cómo hacerlo:

    $("#captchaform").validate({
    
    		rules: {
    
    			captcha: {
    
    				required: true,
    
    				remote: "process.php"
    
    			}
    
    		},
    
    		messages: {
    
    			captcha: "Correct captcha is required. Click the captcha to generate a new one"	
    
    		},
    
    		submitHandler: function() {
    
    			alert("Correct captcha!");
    
    		},
    
    		success: function(label) {
    
    			label.addClass("valid").text("Valid captcha!")
    
    		},
    
    		onkeyup: false
    
    	});
    

maikol

Es un proyecto un poco avanzado vale la pena descargarlo y ver la aplicacion en funcionamiento, el sistema tiene dos listas la cual cuando se selecciona un PAIS en el otro select apareceran las ciudades de este pais, ademas de esto podemos ingresar paises, ciudades, borrar paises, borrar ciudades todo de forma ASINCRONICA con JQUERY, php, mysql y un poco de ajax. espero el proyecto sea de su total agrado pueden ver la aplicacion en funcionamiento aqui: http://www.getvay.com/SeleccionAvanzado/index.php la pueden descargar aqui: http://www.getvay.com/pg/file/macs1407/read/1792/selects y por cierto con respecto a la validacion en ejemplo en funcionamiento de lo que acabo de postear hay otras 3 aplicaciones, muro de facebook, validacion y registro con jquery y lo gin de twitter espero les sea de ayuda (H)

heisler

Como puedo validar una matriz de input generados dinamicamente con esto?

    Respondiendo a heisler

    Supongo que tendrás que generar dinámicamente el código JS para validar.

heisler

como hago eso sumolari tienes algun link ?
Gracias de antemano

    Respondiendo a heisler

    Lo siento pero no tengo ningún link ni sé realmente cómo hacerlo, era sólo una idea que se me había ocurrido. Soy un novato en Javascript así que no puedo darte más que ideas (algunas de las cuales serán además estúpidas).

    Te recomiendo que preguntes en algún foro como Foros del Web, donde hay usuarios con muchos más conocimientos.


Escribe un comentario

:-) :-D :-P (H) ;-) (*) :-( :-O ;-( :-S :-$ (I) (Y) (N) (G) (^) (D) (C) (B) :-[ (@) (&) (L) (U) (K) (F) (W) (O) (E) (T) (~) (8) (P)