2010-03-30 34 views
12

Estoy completamente confundido ... Juraría que esto estaba funcionando ayer ... Desperté esta mañana y todos mis formularios se detuvieron para trabajar en mi proyecto.onSubmit devolver falso no está funcionando

Todos los formularios tienen un "envío" a una función que devuelve falso, ya que es una llamada ajax, por lo que nunca se envía el formulario.

Después de muchas pruebas, he simplificado la cuestión a este pedazo de código:

<html> 
<head> 
<script type="text/javascript"> 
function sub() 
{ 
    alert ("MIC!"); 
    return false; 
} 
</script> 
</head> 
<body> 

<form method = "post" id = "form1" onsubmit = "return sub()"> 
input: <input type="text" name="input1" > 
    <a href="#" onClick="document.getElementById('form1').submit();">button</a> 
</form> 

</body> 
</html> 

juraría que esto funciona perfectamente, pero hoy es ni de trabajo: D

Por qué si presiono el botón que se envía el formulario?

Sé que es una pregunta total de novato, pero estoy atascado

Gracias!

Respuesta

2

tratar de cambiar que "botón" código como el que

<a href="#" onClick="return document.getElementById('form1').onsubmit();">button</a> 
5

El evento onsubmit sólo se activa para presentaciones normales de formulario. No se activa cuando se llama al método JavaScript submit().

La mejor solución es usar un botón de envío normal aquí.

Si desea continuar con el uso de un enlace a la parte superior de la página (que no es unobtrusive, progressive, o gracia), entonces es necesario llamar a la función sub() explícita y poner a prueba su valor de retorno antes de decidir si debe llame al submit() o no.

12

navegadores no llame al el evento onSubmit en el formulario si llama a submit() mediante programación.

+0

Andy ... te juro que estaba trabajando ayer que :) Tengo todo un proyecto con ese tipo de estructuras, y la forma no se presentó ... Tiene que ser otra cosa ...: P – StuckOnSubmit

+0

El evento de envío no se activará con este código. ¡TRES respuestas separadas dicen eso! O está equivocado, o su caso de prueba no representa suficientemente su código real. – Quentin

+0

¿Estás seguro de que no tienes un botón de envío real? Como eso funcionaría entonces. Tal vez cambiaste tus botones de enviar por anclas como una mejora ayer? ¿Tienes un sistema de control de fuente? ¿Otros desarrolladores también están trabajando en el proyecto que podría haberlo cambiado? –

5

Parece que la función 'submit()' omite el evento 'on' submit 'tags' form 'en Firefox e IE8. Si utiliza un botón de enviar, entonces funciona como se esperaba:

<html> 
<head> 
<script type="text/javascript"> 
function sub() 
{ 
    alert ("MIC!"); 
    return false; 
} 
</script> 
</head> 
<body> 

<form method = "post" action="http://google.com" id = "form1" onsubmit = "return sub();"> 
input: <input type="text" name="input1" > 
    <input type="submit"> 
</form> 

</body> 
</html> 
3

Usted puede utilizar el método preventDefault jQuery.

$(function() { 
     $('#repForm').bind('submit', function (e) { 
      var isValid = true; 
      if (btnname == 'test') { 
       isValid = ValidateEmailID(); 
      } 
      else { 
       isValid = ValidateSomething(); 
      } 

      if (!isValid) { 
       e.preventDefault(); 
      } 
     }); 
    }); 
0

Sospecho que quería utilizar un botón de formulario que no era del tipo de envío. En este caso, también se puede utilizar:

<input type="button" value="Submit" onclick="if(sub()) document.getElementById('form1').submit()"> 

Otro consejo que doy es usar el atributo name en todas sus formas, ya que es mucho más fácil de usar: document.form1.submit() en lugar de document.getElementById('form1').submit(). Es crossbrowser y funciona en todos ellos. getElementById es genial pero no necesario para formularios.

-3

Comprueba sintaxis y estructuras básicas ... luego verifica tus otros formularios en tu página o recuadros de entrada sin formato ... Tuve el mismo problema (o similar: al presionar Enter en el cuadro de entrada se enviaría el formulario)) ...

Copio pegué las muestras de arriba y cargué la página. Funcionaron y el mío no, así que modifiqué el formato e incluso lo reescribí.

+0

¿Qué cambios hizo para que funcione? Eche un vistazo a [cómo responder] (http://stackoverflow.com/questions/how-to-answer), para entender cómo responder preguntas en Stack Overflow. – Jesse

-1

Tengo el mismo problema (que estaba usando IE 8),

siguiente código no está funcionando:

<form method="post" id="form1" onsubmit="sub"> 
<form method="post" id="form1" onsubmit="sub()"> 
<form method="post" id="form1" onsubmit="return sub()"> 

y siguiendo código está trabajando,

<form method="post" id="form1" onsubmit="return(sub())"> 

I simplemente siga la muestra here

Y tenga en cuenta que:

El método de envío no invoca al controlador de eventos onsubmit.

Envíe un formulario utilizando INPUT TYPE = submit, INPUT TYPE = image, o BUTTON TYPE = submit object.

0

Agregue "return" en todas sus declaraciones onsubmit en su etiqueta de formulario ... por ej. onsubmit = "return validate_function()" de esta manera, el retorno falso o el retorno verdadero en su función de validación se publica como resultado del comando de devolución en su publicación.

Cuestiones relacionadas