Discussion:
onsubmit no invocado desde un submit
(demasiado antiguo para responder)
stripTM
2004-02-04 12:06:58 UTC
Permalink
Hasta ahora pensaba que cuando se ejecutaba el metodo submit() de un
formulario lo primero que lanzaba era el onsubmit y luego envia el
formulario de manera que si en lugar de usar un botón normal tenemos
otra etiqueta la que lanza el submit tambien se ejecutaría el onsubmit.

Pero en la práctica estamos viendo que esto no es así, si tengo

<span onclick="document.getElementById('formu').submit();">Lanza</span>
<form ... onsubmit="alert('valido');" id="formu">
<input type="submit" />
</form>

Si pulso sobre el span se ejecuta el sumbit()
Y si pulso el botón, se ejecuta el onsubmit() y luego el submit()

Como nos extrañaba el comportamiento de Mozilla y Explorer hemos mirado
la especificación de DOM y creo que nos da la razón y en estos
navegadores esta mal implementado.

http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-40002357

submit
Submits the form. It performs the same action as a submit button.
No Parameters
No Return Value
No Exceptions

¿Estoy en lo cierto o se me escapa algo?
--
Saludos -=stripTM=-
Cougar
2004-02-04 13:00:03 UTC
Permalink
Post by stripTM
Hasta ahora pensaba que cuando se ejecutaba el metodo submit() de un
formulario lo primero que lanzaba era el onsubmit y luego envia el
formulario de manera que si en lugar de usar un botón normal tenemos
otra etiqueta la que lanza el submit tambien se ejecutaría el
onsubmit.
Pero en la práctica estamos viendo que esto no es así, si tengo
<span
onclick="document.getElementById('formu').submit();">Lanza</span>
<form ... onsubmit="alert('valido');" id="formu">
<input type="submit" />
</form>
-------------------------------------------------------
<span onclick="if (document.getElementById('formu').onsubmit())
document.getElementById('formu').submit();">Lanza</span>
<form onsubmit="alert('valido');" id="formu">
<!--<input type="submit" /> -->
</form>

Parece ser que quien dispara el evento implicitamente solo es el boton
submit, no? el procedimiento de evento se ejecuta antes que el metodo.
-----------------------------------------------------------
Post by stripTM
Si pulso sobre el span se ejecuta el sumbit()
Y si pulso el botón, se ejecuta el onsubmit() y luego el submit()
Como nos extrañaba el comportamiento de Mozilla y Explorer hemos
mirado la especificación de DOM y creo que nos da la razón y en estos
navegadores esta mal implementado.
http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-40
002357
submit
Submits the form. It performs the same action as a submit button.
No Parameters
No Return Value
No Exceptions
¿Estoy en lo cierto o se me escapa algo?
stripTM
2004-02-04 20:59:59 UTC
Permalink
Post by Cougar
<span onclick="if (document.getElementById('formu').onsubmit())
document.getElementById('formu').submit();">Lanza</span>
<form onsubmit="alert('valido');" id="formu">
<!--<input type="submit" /> -->
</form>
Parece ser que quien dispara el evento implicitamente solo es el boton
submit, no? el procedimiento de evento se ejecuta antes que el metodo.
Si, como indicas funciona pero me parece raro que haya que forzar el
onsubmit.

Y para continuar con mi rayadura he añadido al formulario un <input
type="text" name="texto" /> y si doy al enter cuando estoy sobre este
campo el formulario lanza el onsubmit y luego el submit, con lo que no
solo es el botón 'submit' el que funciona así.

Como comenta Alvaro G Vicario, parece no funcionar solo en los casos
alternativos.
--
Saludos -=stripTM=-
Cougar
2004-02-05 12:43:18 UTC
Permalink
Post by stripTM
Post by Cougar
<span onclick="if (document.getElementById('formu').onsubmit())
document.getElementById('formu').submit();">Lanza</span>
<form onsubmit="alert('valido');" id="formu">
<!--<input type="submit" /> -->
</form>
Parece ser que quien dispara el evento implicitamente solo es el boton
submit, no? el procedimiento de evento se ejecuta antes que el metodo.
Si, como indicas funciona pero me parece raro que haya que forzar el
onsubmit.
Y para continuar con mi rayadura he añadido al formulario un <input
type="text" name="texto" /> y si doy al enter cuando estoy sobre este
campo el formulario lanza el onsubmit y luego el submit, con lo que no
solo es el botón 'submit' el que funciona así.
Como comenta Alvaro G Vicario, parece no funcionar solo en los casos
alternativos.
Si funciona el llamar explicitamente al onsubmit desde etiquetas que no
lo disparan, la cosa queda en mera anécdota. Y en cualquier caso el
formulario siempre se envía.

¿Estará asociado el evento a todos los botones? ¿qué hay en diferentes
navegadores?
Se podría pensar que como el atributo se fija en la tag FORM solo se
disparara desde elementos de formulario ¿o quizás también desde elementos
child del formulario aunque no fueran controles?
Álvaro Lozano
2004-02-05 14:27:05 UTC
Permalink
Post by Cougar
Post by stripTM
Post by Cougar
<span onclick="if (document.getElementById('formu').onsubmit())
document.getElementById('formu').submit();">Lanza</span>
<form onsubmit="alert('valido');" id="formu">
<!--<input type="submit" /> -->
</form>
Parece ser que quien dispara el evento implicitamente solo es el boton
submit, no? el procedimiento de evento se ejecuta antes que el metodo.
Si, como indicas funciona pero me parece raro que haya que forzar el
onsubmit.
Y para continuar con mi rayadura he añadido al formulario un <input
type="text" name="texto" /> y si doy al enter cuando estoy sobre este
campo el formulario lanza el onsubmit y luego el submit, con lo que no
solo es el botón 'submit' el que funciona así.
Como comenta Alvaro G Vicario, parece no funcionar solo en los casos
alternativos.
Si funciona el llamar explicitamente al onsubmit desde etiquetas que no
lo disparan, la cosa queda en mera anécdota. Y en cualquier caso el
formulario siempre se envía.
¿Estará asociado el evento a todos los botones? ¿qué hay en diferentes
navegadores?
Se podría pensar que como el atributo se fija en la tag FORM solo se
disparara desde elementos de formulario ¿o quizás también desde elementos
child del formulario aunque no fueran controles?
Prueba a poner eso mismo dentro del form, a ver como actúa.
stripTM
2004-02-05 20:58:35 UTC
Permalink
Post by Álvaro Lozano
Prueba a poner eso mismo dentro del form, a ver como actúa.
Mi ristra de pruebas en Mozilla 1.6, IE 6, y Opera 7 han dado los mismos
resultados y son:

Si al formulario se le llama usando desde javascript .submit() no se
invoca antes el evento onsumbit, lo he probado con el span dentro y
fuera del formulario y con input tambien dentro y fuera del formulario
(por ejemplo <input type="text" name="texto"
onclick="this.form.submit();" />)

He estado investigando con el Dom inspector de Mozilla y los eventos
onclick, focus... ejecutan "codigo nativo" con lo que supongo que hace
el navegador cuando los crea es 'rellenar ese código' y por ejemplo en
el caso del input submit en el onclick metera algo similar a lo que
mando Cougar :
if this.form.onsubmit()
this.form.sumbit()
--
Saludos -=stripTM=-
Alvaro G Vicario
2004-02-04 15:50:59 UTC
Permalink
Post by stripTM
http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-40002357
submit
Submits the form. It performs the same action as a submit button.
No Parameters
No Return Value
No Exceptions
¿Estoy en lo cierto o se me escapa algo?
Bueno, el documento que indicas habla de HTML. En tu código el método
submit funciona perfectamente (el formulario se envía tanto con el botón
como con el SPAN), el que hace cosas raras es el JavaScript: el manejador
de eventos onsubmit no es invocado cuando el formulario se envía de la
manera alternativa.
--
--
-- Álvaro G. Vicario - Burgos, Spain
--
Cougar
2004-02-06 15:12:55 UTC
Permalink
En resumen que tu conclusión es que enviar el form mediante el método
submit en javascript, se pasa por alto al evento onsubmit no importa
desde donde se le llame en la página, no?

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
stripTM
2004-02-08 17:31:26 UTC
Permalink
Post by Cougar
En resumen que tu conclusión es que enviar el form mediante el método
submit en javascript, se pasa por alto al evento onsubmit no importa
desde donde se le llame en la página, no?
Exacto, sólo los elementos del formulario generan automáticamente el la
llamada al onsubmit.
--
Saludos -=stripTM=-
Loading...