error al validar formulario javascript

Iniciado por Azielito, 29 Abril 2010, 17:11 PM

0 Miembros y 1 Visitante están viendo este tema.

Azielito

bien, tengo este script
Código (javascript) [Seleccionar]
//para validar campos con expresiones regulares
function valida(campo,expreg){
var o = 'document.odo.'+campo;
eval('o = '+o);
if(!ExpReg(expreg,o.value)){
alert('Error en '+o.title);
o.focus();
o.select();
return false;
}
}
// para revisar todos los campos  ¬¬
function revisa(){

if(!valida('folio','^[0-9]')){ return false;}
if(!valida('p_gas','^[0-9]{1}\.[0-9]{2}$')){ return false;}
if(!valida('no_eco','^0-9]{3}$')){ return false;}
if(!valida('fecha','^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$')){ return false;}
if(!valida('km','^[0-9]$')){ return false;}
if(!valida('importe','^[0-9]{3}')){ return false;}
if(document.odo.solicitante.type=='select-one'){
if(!valida('solicitante','^[1-9]$')){ return false;}
}else{
if(!valida('solicitante','^[a-zA-Z]$')){ return false;}
}
if(!valida('litros','^[0-9]{2}\.[0-9]{3}')){ return false;}
return true;
}


Mando a llamar la funcion con el
Código (html) [Seleccionar]
onsubmit="return revisa();"

Funcionan bien las validaciones con las expresiones regulares, el problema es que solo me ejecuta el la primer validacion, o sea:
if(!valida('folio','^[0-9]')){ return false;}


y no pasa de ahí ¬¬

casi estoy seguro que es por el return false, pero si lo quito entonces se va al siguiente campo y al siguiente y temrina por enviar el form aun que tenga errores jajajaja


Bueno, escribo por que ya tengo un buen rato con esto y ya se me acabaron las ideas jijijiji, saludos y gracias :D


PD: la pregunta es, ¿donde esta el error? y ¿por que no funciona como deberia? XD

-Ramc-

Pero, si alguno de los campos tiene error entonces debería dar falso todo ¿no?

Es por el return que te saca de la función de una vez, si quieres saber que campos fueron los que dieron falso, guarda el false en un arreglo o también puedes, usar un entero e ir activando bits, o puedes usar directamente la función valida en el código

El return devuelve el control al lugar de donde fue llamado, ese es el problema.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Azielito

voy a probar con poner un "return true" a cada uno XD sino hare lo del array

ya te aviso :D

-Ramc-

Cita de: Azielito en 29 Abril 2010, 17:24 PM
voy a probar con poner un "return true" a cada uno XD sino hare lo del array

ya te aviso :D
Pero, poner un return true será lo mismo, porque te sacará de la función, el problema es un return, si quieres saber qué devuelve cada uno tendrás que guardarlo en un array o con el int y los bitsm aunque sería mejor usar la función valida directamente en el código que la necesitas.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.