jQuery: formulario que no se envía con $ (“# id”). submit (), pero se enviará con un botón ‘enviar’?

 

Esa es mi forma, que me parece bien. En esa forma, pongo este botón:

  

Aquí está la función que llama:

 function confirmSubmit() { // get the number of statements that are matched $.post( "load_statements.php?action=checkForReplace", { statementType : $("#statementType").val(), year : $("#year").val() }, function(data) { if(data['alreadyExists']) { if( confirm("Statements already exist for " + $("#statementType").html() + " " + $("#year").val() + ". Are you sure you want to load more statements with these settings? (Note: All duplicate files will be replaced)" )) { $("#loadForm").submit(); } } else { $("#loadForm").submit(); } }, "json" ); } 

y como puede ver, llama $("#loadForm").submit(); , pero el formulario no se está enviando (es decir, la página no se está actualizando). ¿porqué es eso?

¡Gracias!

http://api.jquery.com/submit/

El evento jQuery submit () agrega un detector de eventos para que suceda cuando envíe el formulario. Por lo tanto, su código no vincula esencialmente nada al evento de envío. Si desea que se envíe ese formulario, use el JavaScript de la vieja escuela (document.formName.submit ()).

editar:

Dejo mi respuesta original intacta para señalar dónde estaba fuera (ya que al menos dos personas ya me han votado). Lo que QUIERO decir es que si tiene una función como esta, es confuso por qué publicaría los valores en una parte de ajax y luego usaría jQuery para enviar el formulario. En este caso, vincularía el evento al clic del botón y luego devolvería verdadero si desea que vuelva, de lo contrario, devuelva falso, por lo tanto

 $('#submit').click( function() { // ajax logic to test for what you want if (ajaxtrue) { return confirm(whatever); } else { return true;} }); 

Si esta función devuelve verdadero, entonces cuenta como un clic exitoso del botón de envío y ocurre el comportamiento normal del navegador. Luego, también ha separado la lógica del marcado en forma de un controlador de eventos.

Tiene mas sentido?

Cambiar el nombre de “enviar” del botón a otra cosa. Eso causa el problema. Vea la respuesta de dennisjq en: http://forum.jquery.com/topic/submiting-a-form-programmatically-not-working

Vea la documentación de jQuery submit ():

Los formularios y sus elementos secundarios no deben usar nombres de entrada o identificadores que entren en conflicto con las propiedades de un formulario, como el envío, la longitud o el método. Los conflictos de nombres pueden causar fallas confusas. Para obtener una lista completa de las reglas y verificar su marca para estos problemas, vea DOMLint.

Yo uso $("form")[0].submit()

Aquí $("form") devuelve una matriz de elementos DOM, por lo que al acceder al índice relevante podemos obtener el objeto DOM para el elemento formulario y ejecutar la función submit() dentro de ese elemento DOM.

La reducción es si tiene varios elementos de formulario dentro de una página html, debe tener una idea sobre el orden correcto de “formulario” s

Tuve un problema similar, tomó un tiempo para resolverlo. La función .submit () de jQuery debería desencadenar un envío de formulario si no le pasa un controlador, pero la razón por la que no lo hace es porque su botón de envío se denomina “enviar” y reemplaza la función de envío del formulario.

es decir, jQuery llama a la función

.submit()

del objeto DOM, pero también se puede acceder a todas las entradas dentro de un formulario llamando a

.

. Entonces, si una de sus entradas se llama ‘enviar’, anula la función

.submit()

con

.submit

– es el elemento DOM de entrada … ¿si eso tiene sentido? Entonces, cuando jQuery llama a

.submit()

no funciona porque el envío ya no es una función. Por lo tanto, si cambia el nombre de su botón, debería funcionar.

No está seguro de por qué la consola no registra un error, tal vez jQuery primero comprueba que la función de envío existe y simplemente ignora la solicitud si la función no existe.

agregué un botón de envío invisible al formulario y, en lugar de llamar a la función submit (), llamo a la función click () en el botón de envío =)

el botón:

la manera loca de evitar el envío del formulario: $("#alternateSubmit").click();

borre el atributo “nombre” en su botón de envío:

este es tu código

  

debería ser así:

  

Parece que tienes el envío en una callback que solo se ejecuta después de una publicación ajax en tu controlador onclick.

En otras palabras, cuando hace clic en enviar, el navegador debe salir primero y presionar la acción checkForReplace.

es una llamada de Ajax, por qué necesita enviar su formulario mientras ya lo procesa utilizando ajax. Puedes navegar fuera de la página usando

 window.location.href = "/somewhere/else";