09/02/09 (Hace 572 días)
Después de 120 días sin escribir :X, por fin me he dignado a escribir un post que espero que le pueda servir a alguien de ayuda, por lo menos a un eulalio que yo me se XD. Voy a escribir un post sobre como hacer validaciones en tiempo real, es decir, no esperaremos a que el usuario envíe el formulario sino que iremos validando cada uno de los campos según se vaya introduciendo la información. Para ver esto hare una demo apoyándome en la librería jQuery, que no solo nos da la posibilidad de realizar fáciles validaciones al momento sino que además nos permite jugar con una gran variedad de atractivos efectos.
Como ya he dicho en la introducción queremos conseguir una validación de formulario en tiempo real, es decir cada vez que un campo del formulario pierda el foco, automáticamente comprobaremos que el campo modificado es correcto, además comprobaremos que todos los campos que preceden a este no se encuentran vacios y que la información es correcta. Con esto mejoraremos la experiencia de usuario ya que avisamos en el mismo momento de cada uno de los errores que está cometiendo al introducir los datos en los campos del formulario y estaremos evitando el tener que realizar varios envíos del form ya que se produjeron fallos en la validación de campos obligatorios.
Dentro de un formulario podemos fijar una serie de campos que sean de tipo obligatorio y sin los cuales el envío del formulario no es posible, pues bien en el ejemplo además de definir campos de tipo obligatorios y mostrar los errores producidos por los mismos, mantendremos informado al usuario con avisos de que la información introducida en un campo no obligatorio no es del todo correcta. En el ejemplo el usuario podrá enviar el formulario en caso de tener avisos pero no en el caso de que el formulario cuente con errores en campos de tipo obligatorio. En todo momento tendremos visible un listado de errores que mostrará al usuario el estado en el que se encuentra cada uno de los campos del formulario.
Este es un ejemplo de referencia y no aplicable a cualquier tipo de formulario ya que según vaya variando el código HTML del formulario habrá que realizar adaptaciones en el código JavaScript, de todas formas podréis ver que gracias a la sencillez de jQuery la adaptación de código según el formulario no es tan complicada. A continuación os muestro como quedaría el formulario con las validaciones:
Código HTML
<form enctype="multipart/form-data" method="post" action="<?=$PHP_SELF?>?x=1">
<fieldset>
<legend id="titulo_formulario">Formulario de contacto</legend>
<p class="obligatorios">* Campos obligatorios</p>
<fieldset>
<legend>Datos personales</legend>
<label for="nombre" accesskey="1">* Nombre
<input type="text" name="nombre" id="nombre" class="obligatorio" tabindex="1"/></label>
<label for="apellidos" accesskey="2" >* Apellidos
<input type="text" name="apellidos" id="apellidos" class="obligatorio" tabindex="2"/></label>
<label for="provincia" accesskey="3">Provincia
<input type="text" name="provincia" id="provincia" tabindex="3" /></label>
<label for="telefono" accesskey="4">Teléfono
<input type="text" name="telefono" id="telefono" tabindex="4" /></label>
<label for="email" accesskey="5">* Email
<input type="text" name="email" id="email" class="obligatorio" tabindex="5" /></label>
<fieldset id="datos_sexo">
<p>Sexo</p>
<label class="radio" for="mujer" accesskey="6">Mujer
<input type="radio" name="sexo" id="mujer" class="obligatorio" tabindex="6" value="mujer"/></label>
<label class="radio" for="hombre" accesskey="7">Hombre
<input type="radio" name="sexo" id="hombre" class="obligatorio" tabindex="7" value="hombre"/></label>
</fieldset>
</fieldset>
<fieldset id="otros_datos">
<legend>Otros datos</legend>
<label for="comentario" id="lb_comentario" accesskey="8">* Comentario<textarea id="comentario" class="obligatorio" rows="10" cols="4" name="comentario" tabindex="8"></textarea></label>
<label for="importancia" id="lb_importancia" accesskey="9">Importancia
<select name="importancia" id="importancia" tabindex="9">
<option value="alta">alta</option>
<option value="media">media</option>
<option value="baja">baja</option>
</select>
</label>
<label for="adjunto" id="lb_adjunto" accesskey="A">Adjuntar archivo
<input type="file" id="adjunto" name="adjunto" tabindex="10"/></label>
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<label for="boletin" id="lb_boletin" accesskey="B">Deseo recibir boletín informativo
<input type="checkbox" id="boletin" name="boletin" tabindex="11" value="si" /></label>
</fieldset>
<input type="submit" name="enviar" id="envio" value="Enviar" />
</fieldset>
</form>
A la hora de hacer el formulario HTML hay tres puntos a resaltar:
<label for="nombre" accesskey="1">* Nombre
<input type="text" name="nombre" id="nombre" class="obligatorio" tabindex="1"/></label>Código JS
array_campos = $("#form_mail label");
array_sexo = $("#datos_sexo label");
var aviso_sexo = true;
var errores_validacion = false;
$("#form_mail input, #form_mail select, #form_mail textarea")
.blur(function (event) {
comprobar_campo($(this), array_campos, array_sexo, false);
event.preventDefault();
});
$("#envio")
.click(function (event) {
var errores_validacion = comprobar_campo($(this), array_campos, array_sexo, true);
if(errores_validacion)
event.preventDefault();
});Tenemos dos eventos, por un lado el blur que como ya hemos dicho llamará a la función comprobar_campo() cada vez que se produzca un cambio en alguno de los campos del formulario y por otro lado el evento click de jQuery que llamará a la función comprobar_campo() al pinchar sobre el boton “enviar”
La función comprobar_campo() será la encargada de comprobar que los datos introducidos por el usuario son correctos y recibira 4 parametros:
Mediante event.preventDefault(); evitamos que el formulario sea enviado para el caso del evento .blur y para el evento click en caso de que se produzcan errores.
if(errores_validacion)
event.preventDefault();
Código JS
function comprobar_campo(campo, array_campos, array_sexo, enviar){
if(enviar)
var orden = $(array_campos).length - 1;
else
var orden = campo.attr("tabindex");
var j = 0;
for(i=0; i < orden; i++)
{
var valor = $(array_campos[i]).children().attr("value");
var nombre_campo = $(array_campos[i]).children().attr("name");
var tipo = $(array_campos[i]).children().attr("class");
if(valor == undefined)
{
if(tipo == "obligatorio" || tipo == "obligatorio marcado")
form_error($(array_campos[i]).children(), "vacio")
else
form_aviso($(array_campos[i]).children(), "vacio")
}
else{
if(nombre_campo == "apellidos")
comprobar_apellidos($(array_campos[i]).children())
else if(nombre_campo == "telefono")
comprobar_telefono($(array_campos[i]).children())
else if(nombre_campo == "email")
comprobar_email($(array_campos[i]).children())
else{
var estado_campo = $(array_campos[i]).children().attr("class")
if(estado_campo == "obligatorio marcado" || estado_campo == "marcado" )
{
$(array_campos[i]).children().removeClass("marcado")
form_correcto($(array_campos[i]).children(), tipo)
}
}
}
if(nombre_campo == "sexo")
{
var marcado_sexo = $(array_sexo[j]).children().attr("checked");
if(marcado_sexo)
aviso_sexo = false;
j++;
}
}
if(aviso_sexo && j==2)
{
form_error($(array_campos[5]).children(), "sexo")
}
if($("#listado_errores ol li.error").length == 0)
return false
else
return true
}La función comprobar_campo será la encargada de decir si los datos introducidos por el usuario son correctos o no y en caso de que no lo sean que tipo de error mostrar.
Lo primero que hace la función es comprobar que campos son los que tiene que validar. Si por un lado el usuario a pulsado el botón enviar esta tendrá que comprobar todos los campos del formulario.
if(enviar)
var orden = $(array_campos).length - 1;
por el contrario si el usuario simplemente acaba de rellenar un campo tomaremos el tabindex del campo modificado y realizaremos las comprobaciones sobre este y los campos anteriores al mismo para evitar que el usuario se deje campos vacios por el camino.
else
var orden = campo.attr("tabindex");
mediante un bucle recorremos los campos que nos interesan y capturamos tres atributos que nos serán de gran ayuda:
var valor = $(array_campos[i]).children().attr("value");var nombre_campo = $(array_campos[i]).children().attr("name");var tipo = $(array_campos[i]).children().attr("class");El primer valor contendrá el dato introducido por el usuario y por la tanto será el valor a validar, el segundo nos servirá para crear el listado de errores y el tercero lo utilizaremos para marcar los campos con un tipo de error determinado y asignarle los estilos de este tipo de error.
La primera y más sencilla comprobación es testear que el campo a validar no se encuentre vacio
if(valor == undefined)
{
if(tipo == "obligatorio" || tipo == "obligatorio marcado")
form_error($(array_campos[i]).children(), "vacio")
else
form_aviso($(array_campos[i]).children(), "vacio")
}
Si el campo se encuentra vacío comprobamos si este es de tipo obligatorio y si lo es llamamos a la función encargada de gestionar los errores (form_error()), en caso contrario simplemente avisaremos al usuario mediante la función (form_aviso()).
Los parámetros que pasaremos a estas funciones serán el campo que ha producido el error o aviso y el tipo de error que se ha producido, en este caso el aviso de campo vacío (”vacio”).
En caso de que el campo no este vacío pasaremos a comprobar que el valor introducido es válido para ese caso concreto.
else{
if(nombre_campo == "apellidos")
comprobar_apellidos($(array_campos[i]).children())
else if(nombre_campo == "telefono")
comprobar_telefono($(array_campos[i]).children())
else if(nombre_campo == "email")
comprobar_email($(array_campos[i]).children())
Según el nombre del campo que sea llamamos a su función asignada para validar su valor.
Por último si el valor introducido es correcto llamaremos a la función encargada de marcar el campo como valido.
else{
var estado_campo = $(array_campos[i]).children().attr("class")
if(estado_campo == "obligatorio marcado" || estado_campo == "marcado" )
{
$(array_campos[i]).children().removeClass("marcado")
form_correcto($(array_campos[i]).children(), tipo)
}
}
Como comente antes para el caso del tipo de sexo tenemos que hacer una validación específica ya que dentro del label no tenemos un único campo sino que tenemos dos. Este procedimiento de validación habría que hacerlo en caso de que tuviéramos otro caso de campos múltiples como puede ser por ejemplo un conjunto de checkbox que utilizamos para solicitar las preferencias de un usuario.
if(nombre_campo == "sexo")
{
var marcado_sexo = $(array_sexo[j]).children().attr("checked");
if(marcado_sexo)
aviso_sexo = false;
j++;
}
}
if(aviso_sexo && j==2)
{
form_error($(array_campos[5]).children(), "sexo")
}
if($("#listado_errores ol li.error").length == 0)
return false
else
return true
Lo primero que hago es comprobar si alguno de los radio se encuentran marcados y si es así pongo la variable de control(aviso_sexo) a false. En caso de que hayamos comprobado todos los radio (en nuestro caso j=2) y aviso_sexo siga con su valor inicial(true) llamaremos a la función de error.
function comprobar_apellidos(apellidos){
$("#e_apellidos").remove();
v_apellidos = $(apellidos).attr("value");
var er_apellidos = / /
if(!er_apellidos.test(v_apellidos))
form_aviso(apellidos, "apellidos")
else
{
var estado_campo = $(apellidos).attr("class")
if(estado_campo == "obligatorio marcado" || estado_campo == "marcado" )
{
$(apellidos).removeClass("marcado")
form_correcto(apellidos, "apellidos")
}
}
}
Mediante esta función comprobaremos que por lo menos se han introducido dos apellidos y en caso de no ser así simplemente lanzaremos un aviso
La primera línea de la función se encarga simplemente de eliminar el error del listado de errores. A continuación nos apoyamos en una expresión regular para comprobar que el valor introducido contenga por lo menos un espacio.
Código Js
var er_apellidos = / /En caso de no ser así llamamos a form_aviso, por el contrarió en caso de existir y estar marcado con la clase “marcado” la función llamada sería form_correcto() y el marcado sería eliminado.
function comprobar_telefono(telefono){
$("#a_telefono").remove();
v_telefono = $(telefono).attr("value");
var er_tlfono = /^([0-9\s\+\-])+$/
var num_telefono = v_telefono.length
if(!er_tlfono.test(v_telefono))
form_aviso(telefono, "no-num")
else if(num_telefono < 9)
form_aviso(telefono, "corto")
else
{
var estado_campo = $(telefono).attr("class")
if(estado_campo == "obligatorio marcado" || estado_campo == "marcado" )
{
$(telefono).removeClass("marcado")
form_correcto(telefono)
}
}
}
En este caso comprobaremos que solo se introduzcan números y determinados símbolos como +,- y un mínimo de 9 dígitos. Para el caso de los nueve dígitos simplemente comprobamos que v_telefono.length < 9 y si es así lanzamos un aviso de tipo “corto”. Para el caso de los símbolos el funcionamiento vuelve a ser el mismo que hemos visto para los apellidos, utilizamos una expresión regular y según sea el resultado lanzamos el aviso de tipo “no-num” o no. La expresión regular utilizada:
Código Js
var er_tlfono = /^([0-9\s\+\-])+$/Con esta expresión estamos diciendo que queremos que el valor empiece por un número del 0 al 9, espacio en blanco, símbolo + o menos y se repita una o mas veces hasta el final.
function comprobar_email(email){
$("#e_email").remove();
v_email = $(email).attr("value");
var er_email = /^(.+\@.+\..+)$/
if(!er_email.test(v_email))
form_error(email, "email")
else
{
var estado_campo = $(email).attr("class")
if(estado_campo == "obligatorio marcado" || estado_campo == "marcado" )
{
$(email).removeClass("marcado")
form_correcto(email)
}
}
}
Volvemos a utilizar una nueva expresión regular:
Código Js
var er_email = /^(.+\@.+\..+)$/Empezamos con un caracter como mínimo seguido de una @, seguida de uno o mas caracteres, un punto y uno o mas caracteres hasta el final.
Todas estas funciones vistas se podrían modificar para hacerlas más estrictas pero para este caso ya sería liarse demasiado :).
Voy a comentar solo la función de error ya que la de aviso tiene prácticamente el mismo funcionamiento
function form_error(campo, error)
{
$(campo).animate({
backgroundColor: "#FFE8E8",
color: "#000"
}, 1500 );
$(campo).addClass("marcado")
var id_error = "#e_" + $(campo).attr("name")
switch(error)
{
case "vacio":
if($(id_error).attr("class") == undefined)
{
$("#listado_errores ol").append("<li id='e_" + $(campo).attr("name") + "' class='error'><span>El campo obligatorio <strong>" + $(campo).attr("name") + "</strong> se encuentra vacio</span></a></li>")
}
break;
case "email":
if($(id_error).attr("class") == undefined)
{
$("#listado_errores ol").append("<li id='e_" + $(campo).attr("name") + "' class='error'><span>El <strong>e-mail</strong> introducido es incorrecto</span></a></li>")
}
break;
case "sexo":
if($(id_error).attr("class") == undefined)
{
$("#listado_errores ol").append("<li id='e_" + $(campo).attr("name") + "' class='error'><span>Debe seleccionar su <strong>sexo</strong>: Mujer, Hombre</a></li>")
}
break;
}
}
Lo primero que hacemos es utilizar el método animate de jQuery para conseguir cambiar el color de fondo y de fuente progresivamente durante un tiempo de 1,5 segundos.
$(campo).animate({
backgroundColor: "#FFE8E8",
color: "#000"
}, 1500 );
jquery.color.js: El método animate de jQuery no es capaz por si solo de producir una animación sobre el color de fondo de un elemento. Para poder hacer esto necesitamos apoyarnos en el plugin de jQuery: jquery.color.js. Podéis encontrarlo en la carpeta “js” del ejemplo bajo el nombre de colors.js.
Siguiendo con la explicación de la función de error, asignaremos la clase “marcado” al campo para saber que ese campo está produciendo un error o aviso y creamos el identificador de error (id_error) utilizando el name del campo. Este id lo utilizaremos para asignarlo al li del listado de errores.
$(campo).addClass("marcado")
var id_error = "#e_" + $(campo).attr("name")
Para finalizar nos fijamos en el segundo parámetro que recibe la función (error) que nos dará el tipo de error que se esta produciendo y según su valor mostraremos un tipo de error determinado en el listado de errores, que estará formado por un li con un id: e_[nombre_del_campo] un class “error” y el mensaje. Para el caso de la función aviso el id será del tipo: a_[nombre_del_campo] y utilizara un class “aviso”.
Está función se encargará de marcar los campos que contenían fallos como válidos y producirá una determinada animación gracias al método animate.
$(campo).addClass("marcado")
function form_correcto(campo, tipo)
{
$(campo).animate({
backgroundColor: "#CDEFB4",
color: "#000"
}, 800 );
$(campo).animate({
backgroundColor: "#FFF",
color: "#999"
}, 800 );
$(campo).removeClass("marcado")
c_correcto = $(campo).attr("name");
if(tipo == "obligatorio" || tipo == "obligatorio marcado")
{
e_correcto = "#e_" + c_correcto;
$(e_correcto).remove();
}
else
{
a_correcto = "#a_" + c_correcto;
$(a_correcto).remove();
}
}
En esta función volvemos a utilizar el mismo método animate que utilizamos para la función de error y aviso pero con otros valores para los estilos. Eliminamos la clase marcado para avisar de que el campo es válido y por último creamos la variable c_correcto con el nombre del campo para eliminar el mensaje de error o aviso según sea el tipo del campo.
Código PHP
<?php
if($_GET["x"] == 1)
{
// primero hay que incluir la clase phpmailer para poder instanciar
//un objeto de la misma
require "includes/class.phpmailer.php";
//instanciamos un objeto de la clase phpmailer al que llamamos
//por ejemplo mail
$mail = new phpmailer();
//Definimos las propiedades y llamamos a los mtodos
//correspondientes del objeto mail
//Con PluginDir le indicamos a la clase phpmailer donde se
//encuentra la clase smtp que como he comentado al principio de
//este ejemplo va a estar en el subdirectorio includes
$mail->PluginDir = "includes/";
//Con la propiedad Mailer le indicamos que vamos a usar un
//servidor smtp
$mail->Mailer = "smtp";
//Asignamos a Host el nombre de nuestro servidor smtp
$mail->Host = "nombre_host";
//Le indicamos que el servidor smtp requiere autenticacin
$mail->SMTPAuth = false;
//Le decimos cual es nuestro nombre de usuario y password
//$mail->Username = "usuario";
//$mail->Password = "contraseña";
//Indicamos cual es nuestra direccin de correo y el nombre que
//queremos que vea el usuario que lee nuestro correo
$mail->From = "prueba@jmocana.eu";
$mail->FromName = "nombre";
//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar
//una cuenta gratuita, por tanto lo pongo a 30
$mail->Timeout=30;
$nombre_archivo = $HTTP_POST_FILES['adjunto']['name'];
$tamano_archivo = $HTTP_POST_FILES['adjunto']['size'];
echo $tamano_archivo;
if($tamano_archivo < 1000)
{
if (move_uploaded_file($HTTP_POST_FILES['adjunto']['tmp_name'], "adjuntos/".$nombre_archivo) == false){
echo "Ocurrió algún error al subir el fichero al servidor. El fichero adjunto no pudo ser enviado";
}
else
{
$mail->AddAttachment("adjuntos/".$nombre_archivo,$nombre_archivo);
$subido = true;
}
}
else
echo "El tamaño del archivo es demasiado elevado. Maximo tamaño de ficheros permitido: 100Kb";
//Indicamos cual es la direccin de destino del correo
$mail->AddAddress("prueba@hotmail.com");
//Asignamos asunto y cuerpo del mensaje
//El cuerpo del mensaje lo ponemos en formato html, haciendo
//que se vea en negrita
$mail->Subject = "Prueba de phpmailer";
$mail->Body = "<h1>Nuevo contacto</h1>";
foreach($_POST as $nombre_campo => $valor){
if($nombre_campo != "enviar" && $nombre_campo != "MAX_FILE_SIZE")
$mail->Body = $mail->Body."<p><strong>".$nombre_campo.": </strong>".$valor."</p>";
}
//Definimos AltBody por si el destinatario del correo no admite email con formato html
$mail->AltBody = "Mensaje de prueba mandado con phpmailer en formato solo texto";
//se envia el mensaje, si no ha habido problemas
//la variable $exito tendra el valor true
$exito = $mail->Send();
//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho
//para intentar enviar el mensaje, cada intento se hara 5 segundos despues
//del anterior, para ello se usa la funcion sleep
$intentos=1;
while ((!$exito) && ($intentos < 5)) {
sleep(5);
//echo $mail->ErrorInfo;
$exito = $mail->Send();
$intentos=$intentos+1;
}
if(!$exito)
{
echo "Problemas enviando correo electrnico a ".$valor;
echo "<br>".$mail->ErrorInfo;
}
else
{
echo "Mensaje enviado correctamente";
}
if($subido)
unlink("adjuntos/".$nombre_archivo);
}
?>Respecto al código PHP que utilizamos para enviar nuestro formulario HTML lo mas importante a recalcar es que utilizamos la clase PHPMailer que nos permite enviar archivos adjuntos en nuestros correos. Para saber más acerca de esta clase os recomiendo que le echeis un vistazo un tutorial en español bastante bueno: Tutorial PHPMailer en programacion.com
En el código que estoy utilizando tengo configurado a false el SMTPAuth con lo que estoy diciendo que el servidor smtp no requiere autentificación. En el caso de que vuestro servidor smtp requiera autentificación tendréis que poner a true la variable SMTPAuth y descomentar y configurar el username y password tal que asi:
//Le indicamos que el servidor smtp requiere autenticacin
$mail->SMTPAuth = true;
//Le decimos cual es nuestro nombre de usuario y password
$mail->Username = "usuario";
$mail->Password = "contraseña";
Para el envio de un archivo adjunto utilizaremos el siguiente código
$nombre_archivo = $HTTP_POST_FILES['adjunto']['name'];
$tamano_archivo = $HTTP_POST_FILES['adjunto']['size'];
if($tamano_archivo < 1000)
{
if (move_uploaded_file($HTTP_POST_FILES['adjunto']['tmp_name'], "adjuntos/".$nombre_archivo) == false){
echo "Ocurrió algún error al subir el fichero al servidor. El fichero adjunto no pudo ser enviado";
}
else
{
$mail->AddAttachment("adjuntos/".$nombre_archivo,$nombre_archivo);
$subido = true;
}
}
else
echo "El tamaño del archivo es demasiado elevado. Maximo tamaño de ficheros permitido: 100Kb";
Para poder enviar un archivo adjunto por correo lo primero que tenemos que hacer es subirlo a una ubicación determinada en nuestro servidor, asi que empezaremos cojiendo el nombre y tamaño del archivo que el usuario a seleccionado en el campo de tipo fichero y si el tamaño del mismo es inferior a 1kb subimos el archivo a nuestra carpeta adjuntos.
move_uploaded_file($HTTP_POST_FILES['adjunto']['tmp_name'], "adjuntos/".$nombre_archivo)
Una vez que hayamos subido con exito el archivo al servidor utilizaremos el método AddAttachment para adjuntar el archivo en el correo.
Con esto tendriamos listo nuestro formulario con sus validaciones jQuey. Tengo que decir que para que este código estuviera completo habría que realizar unas validaciones de lado servidor ya que las validaciones por javascript no resultan seguras. Si queréis echar un vistazo a algún tutorial donde se hable de validaciones del lado servidor os recomiendo http://www.desarrolloweb.com/scripts/php/validacion-php.php para PHP y http://www.desarrolloweb.com/scripts/asp/validaciones-formularios-asp.php para ASP.
Para cualquier duda dejar un comentario y listo :).
Hasta el proximo post dentro de 200 días :d.
¿Tienes alguna duda, crítica o sugerencia?
alberizo
Escrito el 9 de Febrero de 2009 a las 15:33
Vaya post te has currao al final.
- ¡¡¡ No pongas los mismos tabindex’s en enviar comentarios que en tu formulario de validación, que se convierte en un baile para arriba y abajo
!!!
- Finalmente he buscado lo de meter los inputs dentro del label, para la W3C es correcto, de las 2 formas, aunque yo pienso que un label es para lo que es, un texto vinculado a algo, de hecho para mi sería al revés, el label dentro del input, puesto que el label es más una propiedad de un input, que un input propiedad de un label. En fin… lo que si que no es correcto, es usar las 2 formas, meter el input dentro del label y a la vez usar el for, es redundante.
- El email puede ser ‘ @ .com’
Funciona muy bien la validación, pero para rizar el rizo, deberías abstraerlo más, porque mantener eso luego es un coñazo
Cualquier cambio se convierte en pesadilla buscando y buscando entre líneas.
Que sepas que para enviar este comentario he tenido que editar con firebug, porque cuando pinchas sobre email te va a tu formulario de validación
y con el tabulador también XD
admin
Escrito el 10 de Febrero de 2009 a las 1:40
Buenas amigo alberizo! XD.
- El problema no erán los tabindex, ya que se repiten pero en formularios distintos, el problema venía por que estaba poniendo el mismo id al campo email del ejemplo que el que uso en el form de envíar comentarios :d, pero bueno ya está todo solucionado.
-Respecto a como utilizar los label e input como dices las dos formas son correctas así que suelo utilizar para maquetar la que más me conviene según el diseño que tenga. Respecto a lo de poner el for yo lo veo como una buena costumbre el ponerlo siempre. Puede que sea redundante pero te aseguras el que no se te olvide nunca ponerlo para otros casos.
-Respecto a las expresiones regulares es verdad que son bastante flojas y no abarcan todas las posibilidades pero tampoco quiero meterme mas a fondo por que sino el post se puede hacer interminable XD aunque ya lo es un poco jeje. De todas formas para solucionar el problema que comentas se podría utilizar esta otra expresión que es más estricta:
=====================================
/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
=====================================
- Es verdad que me gustaría facilitar la configuración pero por ahora es lo que me ha dado tiempo jeje, haber si lo cojo más adelante y lo puedo optimizar hasta conseguir la famosa function validacion() que sea capaz de validar cualquier formulario…
usuario
Escrito el 3 de Julio de 2009 a las 16:50
muy bueno el articulo pero lo descargue y creo que falta el archivo css por que no me muestra el form y los mensajes de error conmo se muestran aqui en el ejemplo
salvador
Escrito el 21 de Octubre de 2009 a las 18:16
hola, tegno una duda mira utilizando los js:
jquery.validate y jquery. De manera facil puedo poner esto: pero mi problema es con un select donde quiero poner el metodo predefinido required( dependency-expression ) y bueno viendo los ejemplos quize hacer esto . Pero no me valida nada y bueno como es un metodo predefinido quisiera saber como se usa de manera similar al del input. Gracias
salvador
Escrito el 21 de Octubre de 2009 a las 18:18
hola, tegno una duda mira utilizando los js:
jquery.validate y jquery. De manera facil puedo poner esto: input name=”cp” type=”text” id=”cp” value=”" size=”25″ class=”required digits” minlength=”5″ maxlength=”5″ pero mi problema es con un select donde quiero poner el metodo predefinido required( dependency-expression ) y bueno viendo los ejemplos quize hacer esto .
select name=”idtipoplan” id=”idtipoplan” class=”required(’Elige el plan de estudios’)”
Pero no me valida nada y bueno como es un metodo predefinido quisiera saber como se usa de manera similar al del input. Gracias