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
false
es 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
false
aquí no se ejecutará y el formulario se enviará de cualquier manera. También debe llamarpreventDefault
para 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...catch
se podría usar un bloque.fuente
false
directamente deonsumbit
?(<form onsubmit="return mySubmitFunction(evt)">)
De lo contrario, da un error indefinido.Puedes usar eventos en línea
onsubmit
como 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
submit
controlador de eventos en línea con elonsubmit
atributo 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
.onsubmit
propiedad delform
objeto 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
stopPropagation
fue 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
false
si falla la validación. El punto clave es usar el nombreevent
. No podemos usar por ej.e.preventDefault()
fuente
fuente
.onsubmit
es una mala idea porque evita que se adjunten múltiplessubmit
devoluciones 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
action
atributo 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();
enonsubmit
y funciona.fuente
Puede agregar eventListner al formulario
preventDefault()
y convertir los datos del formulario a JSON de la siguiente manera:fuente