onSubmit no me hace nada :S

LR

Tengo la siguiente comprobacion:

funcion js



Y llamo a la funcion así:

form



El problema es:

  • No entra en la funcion, he probado a obligar a la funcion a pasarle el nombre del formulario.

  • Si en vez de asignarselo al evento onsubmit, se lo añado al boton de envio, si me entra en la funcion, pero me obliga a tener habilitado javascript, sino, no funciona el boton.

Alguna idea de por que pasa esto?

Lo que quiero realmente es comprobar con javascript y despues, cuando envia, que me haga una segunda comprobacion. Asi si falla javascript me lo comprueba con php.

chesko

supongo que el botón de envío del formulario es tipo submit y no button...

si no, ahí estaría el fallo.

LR

Si lo hago con onSubmit, defino el boton como "submit" si le meto un onclick para cargar la funcion, lo defino como "button"

PD: javascript y yo nos llevamos muy mal :/ xDD

erdanblo

haz la prueba usando un ejemplo mas sencillo:

<form blabla onsubmit="alert('Has enviado el formulario');">

Si te funciona o no, ya sabes por donde te falla.

LR

#4 el alert dice que esta muy cansado y que no quiere aparecer xDD

A que puede deberse lo de que no me sirva el onsubmit?

chesko

pues de primeras no se me ocurre ningún fallo típico más, sorry.

De todas formas he visto que tienes algunas cosas raras en el código, como un break después de un return (no hace falta, un return sale de ahí). Y aparte siempre que encuentras un fallo en el form debererías hacer un return false y al final del todo un return true.

Creo que por eso no hace el submit (¿dónde está el return true?)

P.D: sólo he mirado el código muy por encima

LR

#6 lo del break lo tenia de antes porque en vez de return, usaba formulario.submit;

Aun asi, poniendo que fallase eso, me tendria que hacer los if y no me los hace. De hecho, ni siquiera me hace un onSubmit="alert('hola')">

D10X

En vez meter negocio en el form, hazlo en el .js y asi quitas esos horribles "return;" ... :S.

Es decir, ... vale, todo bien, pero te creas un boton tal que:

<input type="button" value="Guardar" onclick="validar()" />

Luego en el .js haces las validaciones que quieras, si alguna va mal, le sueltas el alert y un "return false;", y si todo va bien pones un:

document.nombreForm.submit();

Y le metes un "return true;"

Ademas, en vez ponerle mil alerts, te haces un var, vas concatenando, y te queda un codigo mas manejable.

var texto = "";
var continuar = true;

if(!condicion1) {
texto = texto + "Condicion 1 no se cumple \n";
continuar = false;
}
if(!condicion2) {
texto = texto + "Condicion 2 no se cumple \n";
continuar = false;
}
if(!condicion3) {
texto = texto + "Condicion 3 no se cumple \n";
continuar = false;
}

if(Continuar){
document.nombreForm.submit();
return true;
}else{
alert(texto);
return false;
}

erdanblo

Lo que ocurre es que si pones la función validar() bajo un evento onclick() del botón de enviar, si el usuario te envia el formulario pulsando la tecla por ejemplo, no te va a evaluar la función validar().

Aun así, debes de contar con que el usuario no va a siempre usar tu formulario, y que es posible pasar parámetros al script que ejecutes después, porlo que tendrás que hacer una doble validación (la 2º desde el servidor).

Otro apunte mas, si alert() no te funciona bajo el evente onsubmit en el form, investiga si realmente ese evente existe o no. Si tienes Firefox, puedes echarle un vistazo a la consola de errores de Firefox, si encuentra algún error en el javascript, te lo va a chivar.

chesko

lo más cómodo es usar la extensión firebug para debuggear el script, y ponerle puntos de ruptura en la entrada, por lo menos para ver si se alcanza la función.

es que usar sólo lo de la consola de errores me parece muy poco eficiente :)

D10X

#9 onclick funciona tanto para pulsaciones de raton como para las teclas.

Y lo de ejecutar el submit, sin pasar por el formulario ... :S, pues depende de la utilidad de la aplicacion ... si es una aplicacion con acceso desde Internet, con usuarios que no puedes controlar, etc ..., etc ... las validaciones que esta haciendo en el .js no le sirven de todas formas, y tendria que cambiar todo para ejecutar las validaciones en el propio codigo que reciba el formulario.

Basandonos en lo que ha escrito, es perfectamente valido ejecutar un submit en el propio .js, ahora, si existe el problema de la posibilidad de aceptar llamadas sin pasar por el formulario, directamente que deseche esas validaciones y la llamada al .js y lo haga todo en servidor ... :S.

No tiene ningun sentido hacerle una doble validacion, porque supone un doble trabajo, y un doble mantenimiento en el futuro.

LR

La cuestion es que...como ya puse antes, si en vez de comprobar con onsubmit, lo meto en un onclick, si que me funciona.

La pregunta es.... ¿por que?

el problema de hacerlo con el onclick es, que si tengo deshabilitado javascript por el motivo que sea, no me envia el formulario, por eso lo de comprobarlo con un onsubmit.

He mirado la consola de errores y no da ningun fallo..todos los fallos que me dan son de .css de mv xDDDDDDD

erdanblo

Compatible parece que es:
http://reference.sitepoint.com/html/event-attributes/onsubmit

¿El botón para enviar el formulario es de tipo "submit"?

NeB1

#12 a veces ocurren cosas muy muy raras en javascript a las cuales yo no les he conseguido dar explicación. Cuando me ha pasado algo parecido he hecho lo siguiente.

Vas a lo más básico para ver que te funciona: form onsubmit='alert("hola");'.

Si esto funciona, te creas una funcion

function probando(){
alert('hola');
}

y pones onsubmit='probando()'

Si esto funciona, le añades lineas de la funcion que querías poner al principio, de poco en poco, y probando siempre que sigue funcionando.

Parece surrealista, pero a veces una función no me funcionaba, y sin hacer ningún cambio, me ha funcionado xDD cambiando el nombre de la función o cosas así.

LR

probe con onsubmit="alert('hola');"

y no funcionaba...al final lo he hecho tal y como lo tenia al principio, con un onclick, el problema de eso es, que solamente envia el formulario si esta habilitado javascript :S

#13 lo puse como "submit" y al no funcionar he decidido ponerlo como "button" y meterle un onclick.

Usuarios habituales

  • LR
  • NeB1
  • erdanblo
  • D10X
  • chesko