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>