Validar un formulario con jQuery antes de enviarlo
Veremos cómo validar un formulario con jQuery Validate antes de enviarlo. Una manera de prevenir posibles errores y hacer más eficaz el envío de formularios.
Una de las funciones que le dan un perfil mas profesional a nuestra web, es la validación de los formularios, antes de enviarlos. Una opción es enviar el formulario, validarlo en el lado del servidor y mostrar el mensaje de error. Otra es validarlo antes de enviarlo.
Videotutorial jQuery validación formularios
El plugin Validation de jquery nos permite validar de immediato el formulario, ahorrando pasos y malas experiencias.
Requisitos necesarios
- Debemos tener la libreria jQuery,
- y debemos tener el plugin Validation
El código
1. Referenciamos librerías necesarias
Lógicamente, debéis actualizar las versiones de jquery que tengáis y el nombre de la librería Validate si ésta cambiara.
<script type="text/javascript" src="./include/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="./include/jquery.validate.js"></script>
2. Se crea la función que hará la validación
$().ready(function() { $("#formcontacto").validate({ rules: { nombre: { required: true, minlength: 2}, email: { required:true, email: true}, telefono: { minlength: 2, maxlength: 15}, mensaje: { required:true, minlength: 2}, validator: { required:true, maxlength: 4, minlength: 4} }, messages: { nombre: "El campo es obligatorio.", email : "El campo es obligatorio y debe tener formato de email correcto.", telefono : "El campo Teléfono no contiene un formato correcto.", mensaje : "El campo Mensaje es obligatorio", validator : "Inerte los cuatro caracteres de la imagen superior.", } }); });
Aunque podéis ver todas las opciones en la web oficial del plugin, os resumo que ‘$(«#formcontacto»).validate(‘ hacemos que el formulario con ID formcontacto, antes de enviarse se validará con las opciones del apartado ‘rules’ y en caso de haber error, se mostrarán los mensajes del apartado ‘messages’.
Dentro de ‘rules’ y ‘messages’ nos referimos a cada campo por su atributo Name (nombre, email, telefono y mensaje )
Editado: las función se refiere a los Names de los campos. No a los ID com anteriormente decía.
3. El formulario
<form id="formcontacto" action="./contactar_send.php" method="post"> <ul> <li> <label>Nombre *</label> <input type="text" id="nombre" name="nombre" maxlength="125"> </li> <li> <label>Email *</label> <input type="text" id="email" name="email" maxlength="225"> </li> <li> <label>Teléfono</label> <input type="text" id="telefono" name="telefono" maxlength="50"> </li> <li> <label>Mensaje *</label> <textarea id="mensaje" name="mensaje" rows="5" cols="36"></textarea> </li> <li> <input type="submit" value="Enviar"> </li> </ul> </form>
Importante poner el ID del formulario (formcontacto) y de los diferents atributos Name de los campos (en el ejemplo: nombre, email, telefono y mensaje)
4. La hoja de estilos
form label { width: 100%; float: left; display: inline-block; font-weight: bold; margin-bottom: 5px; } form label.error { float: left; color: red; font-weight: normal; padding-left: .5em; vertical-align: top; }
Los label serían las etiquetas de los diferentes campos, y el label.error sería el formato de los mensajes de error.
5. El ejemplo online
En CodePen, si buscáis jquery validate, encontraréis multitud de ejemplos. Os dejo otro, que pone las condiciones de la validación en el mismo formulario.
Espero que el artículo Validar un formulario con jQuery antes de enviarlo, haya sido de vuestro interés y que os sea de utilidad.
Más información
Buenas, es posible usar este plugin en conjunto con el «ajaxform» y como seria la implementación? Gracias de antemano!
Hola Carlos, yo no lo he probado, pero como se indica en el siguiente enlace, parece que si es posible, siempre respetando el orden de llamada. Primero validate() y luego ajaxForm().
http://www.ozonesolutions.com/programming/2011/09/ajaxform-and-validation-plugins-for-jquery/
Saludos, muy útil el articulo para esta implementación, dos cosas:
1) Seria muy bueno saber como montaste el ejemplo del Captcha ya que en el ejemplo no está.
2) En el formulario que tienes en http://www.papaxoc.com/contactar/ puedo ver dos cosas:
1- Cuando envio los datos completos me genera error y me envia a http://www.papaxoc.com/contactar/send sin decirme cual es el error, entonces lo más seguro fue que el captcha que lo hice mal.
2- Cuando estoy en IE8 al pararme sobre el boton enviar veo la URL en el caso que apunte a un .php esto le puede decir al usuario la ruta donde esta montando ese php que envia un correo, encontre la siguiente solución:
var statusmsg=’,’
function hidestatus(){
window.status=statusmsg,
return true,
}
y en el input ingresar la siguiente instrucción onMouseover=»return hidestatus()»
Mil gracias.
Este plugin no valida los campos por el id sino por el nombre por eso mucha genete lo ha dejado de utilizar ya que no es funcional validar campos por nombre ya que se necesitan esos elementos en el lado del servidor y muchas veces para usar frameworks de trabajo.
Hola tengo una pregunta esta código para validar esta bien pero lo quiero combinar con código que me permite enviar registros a bd sin que se recargue, pero en mi formulario no tengo un botón tipo submit si no tipo botón y en este ejemplo de validación se requiere de submit, es posible con el button o es necesario submit
Prueba capturando el evento click del botón:
También he leído que puedes utilizar la función valid()
Personalmente no lo he probado…
Brother crees que puedas hacer el video haciendo la progra para ver como pones las librerias o como implementas las librerias en web en netbeans gracias
Se puede crear una validación en formulario en base a otra base de datos existente? Supongamos que tengo una base de datos con 2000 empleados y quiero validarlos por su numero de dni cuando ingresan en el formulario?
Hola Francisco,
Se puede mediante AJAX, pero en temas de formularios, lo mejor es que directamente, envíes el formulario y el código PHP se encargue de validar tanto si existe el empleado como el tema de seguridad (evitar ataques inyección).
Podrías hacer un javascript tipo AJAX que se llame cada vez que se complete el campo del empleado. Este AJAX, sin marcharse del formulario podría llamar al PHP que mira si lo que hay en el campo, coincide con algun empleado…
Pero mi opinión es que no es muy recomendable. Que rellenen formulario, que se envíe al PHP correspondiente, que éste controle todo y si no es correcto, que vuelva a salir el formulario con los datos que el usuario había rellenado mostrando el error. Evitarás muchos dolores de cabeza.
Aquí puedes encontrar más información sobre AJAX:
https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=83&Itemid=212