Foros del Web » Programando para Internet » Javascript »

funcion de validacion en formulario

Estas en el tema de funcion de validacion en formulario en el foro de Javascript en Foros del Web. Hola a todos, tengo un pequeño problema. A ver, tengo un formulario con un manejador del evento submit para la validación general. El caso es ...
  #1 (permalink)  
Antiguo 01/09/2009, 11:25
 
Fecha de Ingreso: abril-2008
Mensajes: 50
Antigüedad: 16 años
Puntos: 0
funcion de validacion en formulario

Hola a todos,
tengo un pequeño problema. A ver, tengo un formulario con un manejador del evento submit para la validación general.
El caso es que la función devuelve false si algún campo no supera la validación, y yo pensando que esto evitaría que el formulario se enviase.
Pues resulta que no. El return false dentro de la funcion no evita que se mande.
Tampoco quiero escribirlo manualmente dentro del atributo onsubmit de la etiqueta form.
Alguien me podría aclarar esta duda?
Gracias y un saludo
  #2 (permalink)  
Antiguo 01/09/2009, 11:48
Avatar de lukas4  
Fecha de Ingreso: octubre-2008
Ubicación: frente al pc
Mensajes: 496
Antigüedad: 15 años, 6 meses
Puntos: 12
Respuesta: funcion de validacion en formulario

porke no cambias el submit por un boton q te lleve a una funcion donde valides todo eso?, bueno yo asi le hago, y se me hace mas facil
  #3 (permalink)  
Antiguo 02/09/2009, 07:53
 
Fecha de Ingreso: abril-2008
Mensajes: 50
Antigüedad: 16 años
Puntos: 0
Respuesta: funcion de validacion en formulario

Muchas gracias lukas4 .

Lo cierto es que en un principio lo hice de esa forma. El formulario en realidad se manda por ajax y la función de validación "encapsula" la llamada ajax dentro de un if. Todo perfecto cuando hacía la llamada a través de un ancla, y sin ponerle un action a la etiqueta form.

Lo que pasa es que al validar el xhtml, uno de los errores era la falta de un action en la etiqueta form. Así que lo hice de la forma que yo entendía era la correcta, llamando al asignandole la funcion al manejador onsubmit, y haciendo que esa función devolviese false para evitar que se mandase el formulario, pero no funciona. O no por lo menos haciendolo a través de un listener.

Si por el contario asigno la funcion al atributo onsubmit de la propia etiqueta y el return false depues de la propia llamada, tb va perfectamente. Pero es un poco intrusivo y ahora tengo la curiosidad, puesto que seguro hay algún concepto (como de cía el otro) que se me escapa y que me servirá para aprender algo más.

Así que si alguien sabe la razón o como solucionar el problema le agradeceré si me cuenta.

Mientras sigo mirando a ver si encuentro por ahí la solución.
Gracias otra vez y un saludo!
  #4 (permalink)  
Antiguo 02/09/2009, 08:22
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: funcion de validacion en formulario

Hola:

Si se devuelve false al evento submit, sin duda el envío del formulario se cancela, no tengas la menor duda, y esa parte teórica es correcta (correctísima)... pero si dices que el formulario se envía de todas formas, es simplemente porque tu función validadora tiene algún error (por lo que cuentas, es eso sin dudas)...

La solución es buscar el error y corregirlo.

Prueba tu código con algún navegador con consola de errores o consola javascript, verás que haciendo un seguimiento lo puedes arreglar.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 02/09/2009, 09:37
 
Fecha de Ingreso: abril-2008
Mensajes: 50
Antigüedad: 16 años
Puntos: 0
Respuesta: funcion de validacion en formulario

gracias Caricatos,
miro y remiro las funciones y de momento no encuentro el problema, pero está bien que me asegures que tiene que ser algún error.
Por si os apetece jugar a buscar el error, os pongo el par de funciones en cuestión

Código PHP:
contacto.ajax.mandarDatos = function(){
    var 
url='contacto.php';
    var 
parameter = $('contacto').serialize();
    if(
contacto.validacion.errorFlag==0){
        new 
Ajax.Request(
            
url,{
            
method'post',
            
parameterparameter,
            
onSuccess:function(){
                    $(
'contCont').innerHTML 'Gracias por su interés. Su formulario se ha mandado correctamente';
                }
            }
        );
    }else{
        $(
'errorDisplayer').innerHTML 'Revise el formulario. <strong>Contiene errores</strong>';
    }
    return 
false;
}
contacto.init = function(){
    var 
expresionCadena = /w+/g;
    var 
expresionEmail = /[w-.]{3,}@([w-]{2,}.)*([w-]{2,}.)[w-]{2,4}/;
    
Event.observe('nombre''change', function(){
        
contacto.validacion.validarCampo('nombre'expresionCadena);
    });
    
Event.observe('asunto''change', function(){
        
contacto.validacion.validarCampo('asunto'expresionCadena);
    });
    
Event.observe('email''change', function(){
        
contacto.validacion.validarCampo('email'expresionEmail);
    });
    
Event.observe('mensaje''change', function(){
        
contacto.validacion.validarCampo('mensaje'expresionCadena);
    });
    
Event.observe('contacto''submit', function(){
        
contacto.ajax.mandarDatos();
    });
}
Event.observe(window'load', function(){
    
contacto.init();    
}); 
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 16:25.