Foros del Web » Programando para Internet » Javascript »

Validar formulario en Firefox

Estas en el tema de Validar formulario en Firefox en el foro de Javascript en Foros del Web. Hola, mi duda es la siguiente. Tengo un formulario que deseo validar. Para ello he desarrollado una función bastante grande que va a la perfección ...
  #1 (permalink)  
Antiguo 11/02/2007, 19:41
 
Fecha de Ingreso: febrero-2007
Mensajes: 7
Antigüedad: 17 años, 2 meses
Puntos: 0
Validar formulario en Firefox

Hola, mi duda es la siguiente. Tengo un formulario que deseo validar. Para ello he desarrollado una función bastante grande que va a la perfección en Internet Explorer, pero que en Firefox parece que ni entra a leerla. ¿Sabeis si tengo que hacer algo especial para que Firefox la reconozca? Os copio el código (que es grande):

Llamada a la función (ASP):
<form method = "POST" id="form" name = "form" onSubmit="return validalo_todo()" action ="default.asp?opcion=5">

Función (en Javascript)
<SCRIPT LANGUAGE=JScript>
function validalo_todo()
{
if( esletra(form.nombre.value) == false )
{
alert("El nombre introducido no puede contener caracteres especiales ni números.");
return false;
}
if( vacio(form.nombre.value) == false )
{
alert("Por favor, introduzca su nombre.");
return false;
}
if( esletra(form.apellidos.value) == false )
{
alert("El/los apellido/s introducido/s no puede/n contener caracteres especiales ni números.");
return false;
}
if( vacio(form.apellidos.value) == false )
{
alert("Por favor, introduzca su/s apellido/s.");
return false;
}
if( mail(form.mail.value) == false )
{
alert("Por favor, introduzca una dirección de e-mail correcta.");
return false;
}
if( vacio(form.mail.value) == false )
{
alert("Por favor, introduzca una dirección de e-mail.");
return false;
}
if( esnumero(form.telefono.value) == false )
{
alert("Por favor, introduzca un teléfono correcto.");
return false;
}
if( vacio(form.telefono.value) == false )
{
alert("Por favor, introduzca su teléfono.");
return false;
}
if( vacio(form.calle.value) == false )
{
alert("Por favor, introduzca la calle.");
return false;
}
if( vacio(form.codigo_postal.value) == false )
{
alert("Por favor, introduzca su código postal.");
return false;
}
if( esnumero(form.codigo_postal.value) == false )
{
alert("El código postal debe ser en número.");
return false;
}
if( escodigopostal(form.codigo_postal.value) == false )
{
alert("El código postal debe contener 5 dígitos.");
return false;
}
if( vacio(form.municipio.value) == false )
{
alert("Por favor, introduzca su municipio.");
return false;
}
if( vacio(form.provincia.value) == false )
{
alert("Por favor, introduzca su provincia.");
return false;
}
if( vacio(form.login.value) == false )
{
alert("Por favor, introduzca el login con el que desea registrarse.");
return false;
}
if( vacio(form.password.value) == false )
{
alert("Por favor, introduzca la palabra clave con la que desea registrarse.");
return false;
}
if (form.password.value!=form.password2.value)
{
alert("Los passwords introducidos no coinciden.");
return false;
}
else
{
return true;
}
}
function esletra(t)
{
var checkOK = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ" + "a?????bcdefghijklmnñopqrstuvwxyzáéíóú ";
var checkStr = t;
var allValid = 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;
}
}
if (!allValid)
{
return false;
}
}

function mail(q)
{
var b=/^[^@\s]+@[^@\.\s]+(\.[^@\.\s]+)+$/
return b.test(q)
}

function esnumero(t)
{
var checkOK = "0123456789";
var checkStr = t;
var allValid = true;
var decPoints = 0;
var allNum = "";
var ch;
var i;
for (i = 0; i < checkStr.length; i++)
{
var ch = checkStr.charAt(i);
for (j = 0; j < checkOK.length; j++)
{
if (ch == checkOK.charAt(j))
{
break;
}
}
if (j == checkOK.length)
{
allValid = false;
break;
}
allNum += ch;
}
if (!allValid)
{
return false;
}
}


function vacio(q)
{
for ( i = 0; i < q.length; i++ )
{
if ( q.charAt(i) != " " )
{
return true;
}
}
return false;
}

function escodigopostal(field) {
var valid = "0123456789-";
var hyphencount = 0;

if (field.length!=5 && field.length!=10) {
return false;
}
for (var i=0; i < field.length; i++) {
temp = "" + field.substring(i, i+1);
if (temp == "-") hyphencount++;
if (valid.indexOf(temp) == "-1") {
return false;
}
if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-")) {
return false;
}
}
return true;
}
</script>







Gracias anticipadas, saludos!!!
  #2 (permalink)  
Antiguo 11/02/2007, 23:55
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Validar formulario en Firefox

Hola blos, bienvenido a los foros :

La forma de referenciar elementos por el id, es una peculiaridad de explorer, pero la forma correcta es con document.getElementById(ID);...
Aunque con los formularios se puede usar la colección de formularios y su nombre (name): document.forms[name]; fíjate que antes era un método o función (por los paréntesis) y ahora es un array (corchetes)...

Pero para validar formularios te aconsejo a pasar el propio formulario como parámetro en la función validadora: onsubmit="return validalo_todo(this)"
Y en la función:
function validalo_todo(F) y luego referencias los campos empezando por el parámetro... F.nombre.value...

Otra cosa que te recomiendo es evitar el uso de nombres que pueda confundir al navegador (id="form" name="form")... aunque no creo que en tu ejemplo importe...
Por último, si una función devuelve true o false, no es necesaria la comparación con true/false... por ejemplo:
if( esletra(form.nombre.value) == false )
se simplifica con
if(!esletra(form.nombre.value))

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 12/02/2007, 05:20
 
Fecha de Ingreso: febrero-2007
Mensajes: 7
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Validar formulario en Firefox

Hola caricatos, gracias por tu respuesta. He probado a hacer todo lo que me dijiste y no hay manera. Lo extraño es que hace meses conseguí que una versión menos completa de la función validalo_todo() funcionara en Firefox, pero ahora no hay forma.

Copio de nuevo el código (con las mofificaciones introducidas) a ver si alguien puede echarme una mano:

Llamada a la función (ASP)
<form method = "POST" id="formulario" name = "form" onSubmit="return validalo_todo(this)" action ="default.asp?opcion=5">

Función (Javascript)
<SCRIPT LANGUAGE=JScript>
function validalo_todo(F)
{
if(!vacio(F.nombre.value))
{
alert("Por favor, introduzca su nombre.");
return false;
}
if(!esletra(F.nombre.value))
{
alert("El nombre introducido no puede contener caracteres especiales ni números.");
return false;
}
if( !vacio(F.apellidos.value))
{
alert("Por favor, introduzca su/s apellido/s.");
return false;
}
if( !esletra(F.apellidos.value))
{
alert("El/los apellido/s introducido/s no puede/n contener caracteres especiales ni números.");
return false;
}
if( !mail(F.mail.value))
{
alert("Por favor, introduzca una dirección de e-mail correcta.");
return false;
}
if( !vacio(F.mail.value))
{
alert("Por favor, introduzca una dirección de e-mail.");
return false;
}
if( !esnumero(F.telefono.value))
{
alert("Por favor, introduzca un teléfono correcto.");
return false;
}
if( !vacio(F.telefono.value))
{
alert("Por favor, introduzca su teléfono.");
return false;
}
if( !vacio(F.calle.value) )
{
alert("Por favor, introduzca la calle.");
return false;
}
if( !vacio(F.codigo_postal.value))
{
alert("Por favor, introduzca su código postal.");
return false;
}
if( !esnumero(F.codigo_postal.value))
{
alert("El código postal debe ser en número.");
return false;
}
if( !escodigopostal(F.codigo_postal.value))
{
alert("El código postal debe contener 5 dígitos.");
return false;
}
if( !vacio(F.municipio.value))
{
alert("Por favor, introduzca su municipio.");
return false;
}
if(!vacio(F.provincia.value))
{
alert("Por favor, introduzca su provincia.");
return false;
}
if( !vacio(F.login.value))
{
alert("Por favor, introduzca el login con el que desea registrarse.");
return false;
}
if( !vacio(F.password.value))
{
alert("Por favor, introduzca la palabra clave con la que desea registrarse.");
return false;
}
if (F.password.value!=F.password2.value)
{
alert("Los passwords introducidos no coinciden.");
return false;
}
else
{
return true;
}
}
function esletra(t)
{
var checkOK = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ" + "a?????bcdefghijklmnñopqrstuvwxyzáéíóú ";
var checkStr = t;
var allValid = 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;
}
}
if (!allValid)
{
return false;
}
}

function mail(q)
{
var b=/^[^@\s]+@[^@\.\s]+(\.[^@\.\s]+)+$/
return b.test(q)
}

function esnumero(t)
{
var checkOK = "0123456789";
var checkStr = t;
var allValid = true;
var decPoints = 0;
var allNum = "";
var ch;
var i;
for (i = 0; i < checkStr.length; i++)
{
var ch = checkStr.charAt(i);
for (j = 0; j < checkOK.length; j++)
{
if (ch == checkOK.charAt(j))
{
break;
}
}
if (j == checkOK.length)
{
allValid = false;
break;
}
allNum += ch;
}
if (!allValid)
{
return false;
}
}


function vacio(q)
{
for ( i = 0; i < q.length; i++ )
{
if ( q.charAt(i) != " " )
{
return true;
}
}
return false;
}

function escodigopostal(field) {
var valid = "0123456789-";
var hyphencount = 0;

if (field.length!=5 && field.length!=10) {
return false;
}
for (var i=0; i < field.length; i++) {
temp = "" + field.substring(i, i+1);
if (temp == "-") hyphencount++;
if (valid.indexOf(temp) == "-1") {
return false;
}
if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-")) {
return false;
}
}
return true;
}
</script>
  #4 (permalink)  
Antiguo 12/02/2007, 05:29
 
Fecha de Ingreso: febrero-2007
Mensajes: 7
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Validar formulario en Firefox

Acabo de lograr que funcione. Ha sido tan alucinante como cambiar esto:

<SCRIPT LANGUAGE="JavaScript">

Gracias por tu respuesta, me vereis a mundo por aquí a menudo.
Saludos!!
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 00:29.