Foros del Web » Programando para Internet » Javascript »

Problema con validación de formulario

Estas en el tema de Problema con validación de formulario en el foro de Javascript en Foros del Web. A ver, tengo un formulario que quiero que al darle al botón enviar, antes de enviar el formulario, compruebe que ciertos campos están rellenos, o ...
  #1 (permalink)  
Antiguo 03/06/2008, 06:03
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 20 años, 9 meses
Puntos: 1
Exclamación Problema con validación de formulario

A ver, tengo un formulario que quiero que al darle al botón enviar, antes de enviar el formulario, compruebe que ciertos campos están rellenos, o que algunos sean sólo números, o tengan una longitud determinada, o por ejemplo en el caso de los campos Día, Mes y Hora, al ser desplegables, y que la opción por defecto que sale marcada es el nombre, que tiene que haber seleccionada cualquier opción menos la primera, para eso he creado este script, es un poco largo y complejo, pero no funciona bien, me explico, te avisa de que no cumple el requisito que sea, te sale la ventana del 'Alert', pero en cuanto le das a 'Aceptar', en vez de volver al formulario, lo que hace es enviarlo de todos modos. El nombre del formulario es: "Reservas". Otro de los fallos es que los mensajes de alerta me salen con caracteres raros, me explico, que en vez de salir los acentos bien, me salen con el código HTML, ese del &, y en el código también se me cambia automáticamente así, después de guardarlo y cerrarlo.

Aquí os dejo el código, tanto del JavaScript, tanto en la parte del formulario donde llamo la función JavaScript, por si acaso está ahí el fallo, que no creo, pero bueno, a ver si alguien ve donde está el fallo.

Código HTML:
<form method="POST" name="Reservas" action="reservas.php" onSubmit="validar()"> 
Código:
<script Language="JavaScript" Type="text/javascript">
function validar()
{
  if (document.Reservas.Dia.selectedIndex < 0)
  {
    alert("Elija una de las opciones \"Dia\".");
    document.Reservas.Dia.focus();
    return (false);
  }

  if (document.Reservas.Dia.selectedIndex == 0)
  {
    alert("La primera opción \"Dia\" no es válida. Elija una de las otras opciones.");
    document.Reservas.Dia.focus();
    return (false);
  }

  if (document.Reservas.Mes.selectedIndex < 0)
  {
    alert("Elija una de las opciones \"Mes\".");
    document.Reservas.Mes.focus();
    return (false);
  }

  if (document.Reservas.Mes.selectedIndex == 0)
  {
    alert("La primera opción \"Mes\" no es válida. Elija una de las otras opciones.");
    document.Reservas.Mes.focus();
    return (false);
  }

  if (document.Reservas.Hora.selectedIndex < 0)
  {
    alert("Elija una de las opciones \"Hora\".");
    document.Reservas.Hora.focus();
    return (false);
  }

  if (document.Reservas.Hora.selectedIndex == 0)
  {
    alert("La primera opción \"Hora\" no es válida. Elija una de las otras opciones.");
    document.Reservas.Hora.focus();
    return (false);
  }

  if (document.Reservas.Comensales.value == "")
  {
    alert("Es obligatorio indicar el número de \"Comensales\".");
    document.Reservas.Comensales.focus();
    return (false);
  }

  if (document.Reservas.Comensales.value.length < 1)
  {
    alert("Es obligatorio indicar el número de \"Comensales\".");
    document.Reservas.Comensales.focus();
    return (false);
  }

  if (document.Reservas.Comensales.value.length > 2)
  {
    alert("Escriba como máximo 2 caracteres en el campo \"Comensales\".");
    document.Reservas.Comensales.focus();
    return (false);
  }

  var checkOK = "0123456789";
  var checkStr = document.Reservas.Comensales.value;
  var allValid = true;
  var validGroups = true;

  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
  } // se cierra el 'for'

  if (!allValid)
  {
    alert("Escriba sólo números en el campo \"Comensales\".");
    document.Reservas.Comensales.focus();
    return (false);
  }

  if (document.Reservas.Contacto.value == "")
  {
    alert("Escriba el nombre de una persona de contacto");
    document.Reservas.Contacto.focus();
    return (false);
  }

  if (document.Reservas.Contacto.value.length < 1)
  {
    alert("Escriba el nombre de una persona de contacto");
    document.Reservas.Contacto.focus();
    return (false);
  }

  if (document.Reservas.Telefono.value == "")
  {
    alert("Escriba un Teléfono de contacto");
    document.Reservas.Telefono.focus();
    return (false);
  }

  if (document.Reservas.Telefono.value.length < 9)
  {
    alert("Escriba un teléfono válido, de 9 dígitos en el campo \"Telefono\".");
    document.Reservas.Telefono.focus();
    return (false);
  }

  var checkOK = "0123456789";
  var checkStr = document.Reservas.Telefono.value;
  var allValid = true;
  var validGroups = true;

  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
  } // se cierra el 'for'

  if (!allValid)
  {
    alert("Escriba sólo números en el campo \"Teléfono\".");
    document.Reservas.Telefono.focus();
    return (false);
  }

  return (true); 
}
</script>

Última edición por rvelezb; 03/06/2008 a las 06:16
  #2 (permalink)  
Antiguo 03/06/2008, 08:41
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Respuesta: Problema con validación de formulario

Es muy fácil: pon return validar() en el submit en vez de solo validar().

Así:

onSubmit="return validar()"
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #3 (permalink)  
Antiguo 03/06/2008, 11:32
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 20 años, 9 meses
Puntos: 1
De acuerdo Respuesta: Problema con validación de formulario

Muchas gracias, ahora ya funciona.

Lo que menos se me había ocurrido es que era esa tontería.
  #4 (permalink)  
Antiguo 03/06/2008, 12:30
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 4 meses
Puntos: 61
Respuesta: Problema con validación de formulario

Creeme si te digo que yo he estado en la misma situación que tú!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #5 (permalink)  
Antiguo 03/06/2008, 13:08
 
Fecha de Ingreso: julio-2003
Ubicación: Sevilla
Mensajes: 81
Antigüedad: 20 años, 9 meses
Puntos: 1
Respuesta: Problema con validación de formulario

Bueno, pues algo se aprende, para futuras veces ya sé como hay que ponerlo.
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 17:44.