Foros del Web » Programando para Internet » Javascript »

problema al hacer varias validaciones en forms

Estas en el tema de problema al hacer varias validaciones en forms en el foro de Javascript en Foros del Web. Quiero q al hacer el submit en un formulario se compruebe q los campos obligatorios se hayan rellenado, q el campo mail sea correcto, y ...
  #1 (permalink)  
Antiguo 28/02/2005, 13:22
 
Fecha de Ingreso: febrero-2005
Mensajes: 26
Antigüedad: 19 años, 3 meses
Puntos: 0
problema al hacer varias validaciones en forms

Quiero q al hacer el submit en un formulario se compruebe q los campos obligatorios se hayan rellenado, q el campo mail sea correcto, y q una fecha seleccionada en primer lugar no sea menor q una segunda fecha. El código es el siguiente:
Código PHP:
<script language="javascript">
function 
y2k(number) { return (number 1000) ? number 1900 number; }
function 
esFecha (day,month,year,campo) {

    var 
today = new Date();
    
year = ((!year) ? y2k(today.getYear()):year);
    
month = ((!month) ? today.getMonth():month-1);
    if (!
day) return false
    
var test = new Date(year,month,day);
    if ( (
y2k(test.getYear()) == year) &&
         (
month == test.getMonth()) &&
         (
day == test.getDate()) )
        return 
true;
    else
        
alert (campo ' es incorrecto');
        return 
false
}
function 
EsCorreo(cadena) {
    
// ¿se soportan expresiones regulares?
    
var soportado false;
    if (
window.RegExp) {
          var 
cadenaTemp "a";
        var 
regularTemp = new RegExp(cadenaTemp);
        if (
regularTemp.test(cadenaTemp)) soportado true;
        }

    if (!
soportado)
           return (
cadena.indexOf(".") > 2) && (cadena.indexOf("@") > 0);

    var 
r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
    var 
r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
    return (!
r1.test(cadena) && r2.test(cadena));
}
function 
validaCorreo(correo,campo) {

    if (!
EsCorreo(correo)) {
        
alert(campo " es incorrecto.");
           return 
false;
        }
    return 
true;
}
function 
esObligatorio(obligatorio,campo) {

    if (
obligatorio == "") {
        
alert(campo " es obligatorio.");
           return 
false;
        }
    return 
true;
}

function 
validar ()
{
  var 
diahoy;
  var 
meshoy;
  var 
anohoy;
  var 
diarec;
  var 
mesrec;
  var 
anorec;
  var 
diadev;
  var 
mesdev;
  var 
anodev;
  var 
correcto;

  
correcto true;

  
diahoy document.reserva_vehiculo.diahoy.value;
  
meshoy document.reserva_vehiculo.meshoy.value;
  
anohoy document.reserva_vehiculo.anohoy.value;
  
diarec document.reserva_vehiculo.diarec.value;
  
mesrec document.reserva_vehiculo.mesrec.value;
  
anorec document.reserva_vehiculo.anorec.value;
  
diadev document.reserva_vehiculo.diadev.value;
  
mesdev document.reserva_vehiculo.mesdev.value;
  
anodev document.reserva_vehiculo.anodev.value;

  
lugrec document.reserva_vehiculo.lugrec.value;
  
mail document.reserva_vehiculo.mail.value;

   
//Primer campo obligatorio
   
correcto esObligatorio(lugrec,"El lugar de recogida del vehículo")
    if (!
correcto) {document.frmFormulario.oficina.focus();return;}
    
//Segundo campo obligatorio
   
correcto esObligatorio(mail,"La dirección de correo electrónico")
    if (!
correcto) {document.frmFormulario.oficina.focus();return;}
    
    
//Fechas
   
correcto esFecha(diarecmesrec,anorec,"El día de Recogida");
    if (!
correcto) {document.reserva_vehiculo.diarec.focus();return;}

    
correcto esFecha(diadevmesdev,anodev,"El día de Devolución");
    if (!
correcto) {document.reserva_vehiculo.diadev.focus();return;}

    var 
today = new Date(anohoy,meshoy-1,diahoy);

    var 
fecharec = new Date(anorec,mesrec-1,diarec);
    if (
fecharec today) {alert('La fecha de recogida no puede ser anterior a la de hoy.');document.reserva_vehiculo.diarec.focus();correcto false;return;};

   var 
fechadev = new Date(anodev,mesdev-1,diadev);
  if (
fechadev fecharec) {alert('La fecha de devolución no puede ser anterior a la de recogida.');document.reserva_vehiculo.diadev.focus();correcto false;return;};

        
//validación de correo
        
correcto validaCorreo(mail,"El formato de correo electrónico")
        if (!
correcto) {document.reserva_vehiculo.mail.focus();return;}

   if (
correcto) {
    
document.reserva_vehiculo.submit();}
}
</script> 
En el formulario tengo:
Código PHP:
<input type="submit" value="Reservar" class="botones" onclick="return validar()"
El problema consiste en q me hace la primera comprobación ("El lugar de recogida del vehiculo...") y no me hace el resto, me pasa al action del formulario.

Alguien sabe pq no funciona??
  #2 (permalink)  
Antiguo 28/02/2005, 13:30
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Lo que pasa es que estas haciendo un return inmediatamente que hay un error, y por eso se sale.. si quieres que se ejecuten todos en cada momento no le pongas return hasta el final.. (si es necesario)

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 28/02/2005, 14:00
 
Fecha de Ingreso: febrero-2005
Mensajes: 26
Antigüedad: 19 años, 3 meses
Puntos: 0
Hice la siguiente modificación en la función validar(). El código es:
Código PHP:
function validar ()
{
  var 
diahoy;
  var 
meshoy;
  var 
anohoy;
  var 
diarec;
  var 
mesrec;
  var 
anorec;
  var 
diadev;
  var 
mesdev;
  var 
anodev;
  var 
correcto;

  
correcto true;

  
diahoy document.reserva_vehiculo.diahoy.value;
  
meshoy document.reserva_vehiculo.meshoy.value;
  
anohoy document.reserva_vehiculo.anohoy.value;
  
diarec document.reserva_vehiculo.diarec.value;
  
mesrec document.reserva_vehiculo.mesrec.value;
  
anorec document.reserva_vehiculo.anorec.value;
  
diadev document.reserva_vehiculo.diadev.value;
  
mesdev document.reserva_vehiculo.mesdev.value;
  
anodev document.reserva_vehiculo.anodev.value;

  
lugrec document.reserva_vehiculo.lugrec.value;
  
mail document.reserva_vehiculo.mail.value;

   
//Primer campo obligatorio
   
correcto esObligatorio(lugrec,"El lugar de recogida del vehículo")
    if (!
correcto) {document.reserva_vehiculo.lugrec.focus();/*return;*/}
    
//Segundo campo obligatorio
   
correcto esObligatorio(mail,"La dirección de correo electrónico")
    if (!
correcto) {document.reserva_vehiculo.mail.focus();/*return;*/}
    
    
//Fechas
   
correcto esFecha(diarecmesrec,anorec,"El día de Recogida");
    if (!
correcto) {document.reserva_vehiculo.diarec.focus();/*return;*/}

    
correcto esFecha(diadevmesdev,anodev,"El día de Devolución");
    if (!
correcto) {document.reserva_vehiculo.diadev.focus();/*return;*/}

    var 
today = new Date(anohoy,meshoy-1,diahoy);

    var 
fecharec = new Date(anorec,mesrec-1,diarec);
    if (
fecharec today) {alert('La fecha de recogida no puede ser anterior a la de hoy.');document.reserva_vehiculo.diarec.focus();correcto false;/*return;*/};

         var 
fechadev = new Date(anodev,mesdev-1,diadev);
        if (
fechadev fecharec) {alert('La fecha de devolución no puede ser anterior a la de recogida.');document.reserva_vehiculo.diadev.focus();correcto false;/*return;*/};

        
//validación de correo
        
correcto validaCorreo(mail,"El formato de correo electrónico")
        if (!
correcto) {document.reserva_vehiculo.mail.focus();/*return;*/}

          if (
correcto) {
            
document.reserva_vehiculo.submit();}

No sé si entendí bien lo q tenía q quitar, pero ahora me salen todos los mensajes de golpe, y me pasa a la siguiente página.
  #4 (permalink)  
Antiguo 01/03/2005, 04:41
 
Fecha de Ingreso: febrero-2005
Mensajes: 26
Antigüedad: 19 años, 3 meses
Puntos: 0
Porfi una ayudita, q tengo mal??.....o alguna alternativa
  #5 (permalink)  
Antiguo 01/03/2005, 09:05
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Ya intentaste colocar un return al final...

algo así:

Cita:
....
....
if (correcto) {
document.reserva_vehiculo.submit();}

return false;
Con ello indicas que cuando acabe toda la validacion si es correcto hará el submit y en caso de que no pase por esa condicion regresará falso y no debería hacer nada.. checalo y nos cuentas que tal ..
  #6 (permalink)  
Antiguo 01/03/2005, 11:20
 
Fecha de Ingreso: febrero-2005
Mensajes: 26
Antigüedad: 19 años, 3 meses
Puntos: 0
sigue sin funcionar. Es decir, q me siguen saliendo todos los mensajes d golpe. Ahora no me pasa a la siguiente página, mientras la dirección d mail sea incorrecta, pero si ésta es correcta sí pasa d página,aunq los otros campos no estén rellenos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:20.