¿Cómo evitar que se envíe el formulario?

Resuelto Nathan Osman asked hace 14 años • 12 respuestas

Tengo un formulario que tiene un botón de enviar en alguna parte.

Sin embargo, me gustaría "captar" de alguna manera el evento de envío y evitar que ocurra.

¿Hay alguna manera de que pueda hacer esto?

No puedo modificar el botón de enviar porque es parte de un control personalizado.

Nathan Osman avatar Jul 28 '10 12:07 Nathan Osman
Aceptado

A diferencia de las otras respuestas, el retorno falsees sólo una parte de la respuesta. Considere el escenario en el que ocurre un error de JS antes de la declaración de devolución...

HTML

<form onsubmit="return mySubmitFunction(event)">
  ...
</form>

guion

function mySubmitFunction()
{
  someBug()
  return false;
}

regresar falseaquí no se ejecutará y el formulario se enviará de cualquier manera. También debe llamar preventDefaultpara evitar la acción de formulario predeterminada para envíos de formularios Ajax.

function mySubmitFunction(e) {
  e.preventDefault();
  someBug();
  return false;
}

En este caso, incluso con el error, ¡el formulario no se enviará!

Alternativamente, try...catchse podría utilizar un bloque.

function mySubmit(e) { 
  e.preventDefault(); 
  try {
   someBug();
  } catch (e) {
   throw new Error(e.message);
  }
  return false;
}
Ben Rowe avatar Jul 28 '2010 06:07 Ben Rowe

Puedes usar un evento en línea onsubmitcomo este

<form onsubmit="alert('stop submit'); return false;" >

O

<script>
   function toSubmit(){
      alert('I will not submit');
      return false;
   }
</script>

<form onsubmit="return toSubmit();" >

Manifestación

Ahora bien, esto puede no ser una buena idea cuando se realizan grandes proyectos. Es posible que necesite utilizar detectores de eventos.

Lea más sobre eventos en línea frente a oyentes de eventos (addEventListener y IE adjuntoEvent) aquí . Porque no puedo explicarlo mejor que Chris Baker .

Ambos son correctos, pero ninguno de ellos es "mejor" per se, y puede haber una razón por la que el desarrollador decidió utilizar ambos enfoques.

Reigel Gallarde avatar Jul 28 '2010 05:07 Reigel Gallarde