¿Cómo enviar un formulario usando javascript?

190

Tengo un formulario con id theFormque tiene el siguiente div con un botón de enviar dentro:

<div id="placeOrder" 
     style="text-align: right; width: 100%; background-color: white;">
    <button type="submit" 
            class='input_submit' 
            style="margin-right: 15px;" 
            onClick="placeOrder()">Place Order
    </button>
</div>

Cuando se hace clic, placeOrder()se llama a la función . La función cambia el innerHTML del div anterior para que esté "procesando ..." (por lo que el botón de enviar ya no está).

El código anterior funciona, ¡pero ahora el problema es que no puedo enviar el formulario! He intentado poner esto en la placeOrder()función:

document.theForm.submit();

Pero eso no funciona.

¿Cómo puedo obtener el formulario para enviar?

Nate
fuente
3
Supongo que tienes una <form>etiqueta en algún lugar de tu página.
Justin808
No veo ningún <formulario> en el código.
Dotoree
1
a qué te refieres con: La función cambia el innerHTML del div anterior para que esté "procesando ..." (así que el botón de enviar ya no está). y te importaría compartir esa lógica. Por cierto, si tiene un botón de envío (en algún lugar con nombre = enviar), la función theform.submit () no funcionará. Aclare su pregunta agregando la etiqueta <form> como lo hizo en su código. Puede usar jsfiddle.net
sakhunzai
55
... si tiene un botón de envío (en algún lugar con nombre = enviar) ... ¡Esto resolvió mi problema! Era <input type = "button" name = "submit" ..., pero seguía bloqueando el envío de JavaScript del formulario.
Nikolay Ivanov

Respuestas:

136

Establezca el nameatributo de su formulario "theForm"y su código funcionará.

Andrew Hare
fuente
14
Esto puede parecer súper obvio para algunos, pero tenía un botón con el nombre y la identificación "enviar", e document.theForm.submit()informé un error. Una vez que cambié el nombre de mi botón, el código funcionó perfectamente.
Jonathan
1
@ Jonathan ¿Cuál es el nombre del botón que tenías? Coz, según api.jquery.com/submit, los elementos secundarios de un formulario no deben usar nombres de entrada o identificadores que entren en conflicto con las propiedades de un formulario.
keya
106

Puedes usar...

document.getElementById('theForm').submit();

... pero no reemplace el innerHTML. Puede ocultar el formulario y luego insertar un procesamiento ... span que aparecerá en su lugar.

var form = document.getElementById('theForm');

form.style.display = 'none';

var processing = document.createElement('span');

processing.appendChild(document.createTextNode('processing ...'));

form.parentNode.insertBefore(processing, form);
alex
fuente
¿Cómo le dices a dónde enviar el formulario? Por ejemplo, en mi caso, quiero que me envíen el contenido por correo electrónico
CodyBugstein el
@ Imray Probablemente querrás que el código del lado del servidor lo haga por ti.
alex
@CodyBugstein establece action="/{controller}/{action-method}" method="post"atributos del formulario que está intentando publicar.
barnes
2
como mi nombre de formulario es printoffersForm, así como la identificación es la misma. document.getElementById('printoffersForm').submit();pero me da error enviar no es una función
Madhuri Patel
@MadhuriPatel ¿Podría tener su botón de envío también llamado enviar? Ver respuesta stackoverflow.com/questions/833032/…
rbassett
37

Funciona perfectamente en mi caso.

document.getElementById("form1").submit();

Además, puede usarlo en la función de la siguiente manera:

function formSubmit()
{
     document.getElementById("form1").submit();
} 
Chintan Thummar
fuente
¿esto enviará valores de formulario desde una inputetiqueta?
simanacci
@roy Sí, enviará valores de formulario desde etiquetas de entrada.
Chintan Thummar
2
@ChintanThummar y luego puede manejar el envío del formulario usando document.getElementById ("form1"). Onsubmit = function () {// Puede usar el código Ajax aquí para enviar el formulario // sin actualizar la página}
Shubham Kumar
No lo he intentado, pero se ve mejor de lo que había proporcionado. Gracias;)
Chintan Thummar
12
document.forms["name of your form"].submit();

o

document.getElementById("form id").submit();

Puedes probar cualquiera de estos ... esto definitivamente funcionará ...

Aruna
fuente
5

Es una publicación antigua pero dejaré la forma en que lo hago para enviar el formulario sin usar la nameetiqueta dentro del formulario:

HTML

<button type="submit" onClick="placeOrder(this.form)">Place Order</button>

JS

function placeOrder(form){
    form.submit();
}

Espero que esta solución pueda ayudar a alguien más. TQ

SkyClasher
fuente
3

HTML

<!-- change id attribute to name  -->

<form method="post" action="yourUrl" name="theForm">
    <button onclick="placeOrder()">Place Order</button>
</form>

JavaScript

function placeOrder () {
    document.theForm.submit()
}
Chandan Gupta
fuente
44
Agregue alguna explicación a su respuesta.
Sampada
Esto no mejora la calidad de las respuestas que ya se dan.
Randy
2

Si su formulario no tiene ninguna identificación pero tiene un nombre de clase como theForm, puede usar la siguiente declaración para enviarlo:

document.getElementsByClassName("theForm")[0].submit();
Bimal Jha
fuente
¿Qué tal si hay más formularios con el mismo nombre de clase arriba?
Jack1987
0

Se me ocurrió una solución fácil usando un formulario simple oculto en mi sitio web con la misma información con la que los usuarios iniciaron sesión. Ejemplo Si desea que un usuario inicie sesión en este formulario, puede agregar algo como esto al siguiente formulario a continuación.

<input type="checkbox" name="autologin" id="autologin" />

Hasta donde sé, soy el primero en ocultar un formulario y enviarlo haciendo clic en un enlace. Existe el enlace que envía un formulario oculto con la información. No es 100% seguro si no le gustan los métodos de inicio de sesión automático en su sitio web con contraseñas ubicadas en un área de texto de contraseña de formulario oculto ......

Bien, aquí está el trabajo. Digamos que $siteides la cuenta y $sitepwes la contraseña.

Primero haga el formulario en su script php si no le gusta html, use datos mínimos y luego haga eco en el valor en forma oculta. Solo uso un valor de php y echo en cualquier lugar que quiera pref al lado del botón de formulario, ya que no puede verlo.

Formulario PHP para imprimir

$hidden_forum = '
<form id="alt_forum_login" action="./forum/ucp.php?mode=login" method="post" style="display:none;">
    <input type="text" name="username" id="username" value="'.strtolower($siteid).'" title="Username" />
    <input type="password" name="password" id="password" value="'.$sitepw.'" title="Password" />
</form>';

PHP y Enlace para enviar formulario

<?php print $hidden_forum; ?>
<pre><a href="#forum" onClick="javascript: document.getElementById('alt_forum_login').submit();">Forum</a></pre>
AgeofTalisman
fuente
Es cierto que debe enviar el formulario, pero el enlace no aparecerá en mi codificación, lo siento, pero haga un clic o href = javascript: document.getElementById ('alt_forum_login').
Submit
La pregunta es sobre javascript, no hay necesidad del código php en absoluto
Shedokan
0

puede usar el siguiente código para enviar el formulario usando Javascript;

document.getElementById('FormID').submit();
Abhijeet Navgire
fuente
-1
<html>
<body>

<p>Enter some text in the fields below, then press the "Submit form" button to submit the form.</p>

<form id="myForm" action="/action_page.php">
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br><br>
  <input type="button" onclick="myFunction()" value="Submit form">
</form>

<script>
function myFunction() {
    document.getElementById("myForm").submit();
}
</script>

</body>
</html>
Jay Nagar
fuente
¿Puedes compartir una respuesta adecuada que solo contenga la parte relevante y alguna explicación la próxima vez?
Nico Haase
Esta respuesta puede ser útil para algunos stackoverflow.com/a/54619085/7003760
Mayer Spitzer