Tengo un formulario que tiene un botón de enviar en alguna parte.
Sin embargo, me gustaría de alguna manera 'atrapar' el evento de envío y evitar que ocurra.
¿Hay alguna manera de que pueda hacer esto?
No puedo modificar el botón Enviar, porque es parte de un control personalizado.
javascript
html
forms
Nathan Osman
fuente
fuente

Respuestas:
A diferencia de las otras respuestas, el retorno
falsees solo una parte de la respuesta. Considere el escenario en el que se produce un error JS antes de la declaración de devolución ...html
guión
volver
falseaquí no se ejecutará y el formulario se enviará de cualquier manera. También debe llamarpreventDefaultpara evitar la acción de formulario predeterminada para los envíos de formularios Ajax.En este caso, incluso con el error, el formulario no se enviará.
Alternativamente,
try...catchse podría usar un bloque.fuente
falsedirectamente deonsumbit?(<form onsubmit="return mySubmitFunction(evt)">)De lo contrario, da un error indefinido.Puedes usar eventos en línea
onsubmitcomo esteO
Manifestación
Ahora, esto puede no ser una buena idea al hacer grandes proyectos. Es posible que deba utilizar los oyentes de eventos.
Por favor leer más sobre Inline Eventos vs detectores de eventos addEventListener (y attachEvent de IE) aquí . Porque no puedo explicarlo más de lo que lo hizo Chris Baker .
fuente
<form onsubmit="return false;" >no funciona para mí.Adjunte un detector de eventos al formulario usando
.addEventListener()y luego llame al.preventDefault()método enevent:Creo que es una mejor solución que definir un
submitcontrolador de eventos en línea con elonsubmitatributo porque separa la lógica y la estructura de la página web. Es mucho más fácil mantener un proyecto donde la lógica está separada del HTML. Ver: JavaScript discreto .Usar la
.onsubmitpropiedad delformobjeto DOM no es una buena idea porque evita que se adjunten múltiples devoluciones de llamada de envío a un elemento. Ver addEventListener vs onclick .fuente
$("button").click(function(e) { e.preventDefault() });Prueba este ...
código HTML
Código jQuery
o
fuente
stopPropagationfue lo único que funcionó en mi caso. ¡Gracias! :)Lo siguiente funciona a partir de ahora (probado en Chrome y Firefox):
donde validateMyForm () es una función que devuelve
falsesi falla la validación. El punto clave es usar el nombreevent. No podemos usar por ej.e.preventDefault()fuente
fuente
.onsubmites una mala idea porque evita que se adjunten múltiplessubmitdevoluciones de llamada a un elemento. Recomiendo usar.addEventListener().Para seguir convenciones de programación de JavaScript discretas , y dependiendo de qué tan rápido se cargue el DOM , puede ser una buena idea usar lo siguiente:
Luego, conecte eventos usando la carga o DOM listo si está usando una biblioteca.
Además, siempre usaría el
actionatributo ya que algunas personas pueden tener algún complemento como NoScript en ejecución que luego rompería la validación. Si está utilizando el atributo action, al menos su usuario será redirigido por el servidor en función de la validación de back-end. Si estás usando algo comowindow.location, por otro lado, las cosas serán malas.fuente
Para evitar que se envíe el formulario, solo necesita hacer esto.
Al usar el código anterior, esto evitará el envío de su formulario.
fuente
Aquí mi respuesta:
Añado
event.preventDefault();enonsubmity funciona.fuente
Puede agregar eventListner al formulario
preventDefault()y convertir los datos del formulario a JSON de la siguiente manera:fuente