2017-01-24 4 views
0

Scheint, ein Timing-Problem beim Absenden eines Formulars zu haben, dass die submit() nicht sofort ausgeführt wird und die nächsten paar Zeilen Javascript ausgeführt werden, bevor das Formular tatsächlich gesendet wird. Timing-Problem mit form.submit()

var eButtons = document.querySelector("#ContactUs_form #buttons"); 
 

 
function submitForm() { 
 
document.getElementById("ContactUs_form").submit(); 
 
\t eButtons.origInnerHtml = eButtons.innerHTML; 
 
\t eButtons.innerHTML = "Saving form..."; 
 
}
<form id="ContactUs_form" method="post" action="ContactUs.php" onsubmit="submitForm();"> 
 
\t <div id="buttons"> 
 
\t \t <input id="btnSubmit" name="btnSubmit" type="submit" value="Submit" class="fLeft"> 
 
\t \t <input id="btnReset" name="Reset" type="reset" value="Reset" class="fRight"> 
 
\t </div> 
 
</form>

Irgendwelche Ideen, warum legt die() wird das Formular nicht sofort einreichen?

Edit: Sollte ausführlicher erklärt werden, wird das Formular übermittelt, aber nicht sofort. Die eButtons.innerHTML Ersetzung tritt auf, bevor das Formular übergeben wird. Wenn das Formular schließlich gesendet wird, enthält es nicht $ _POST ("btnSubmit"), was es tun sollte.

+2

Ich glaube, Sie das Formular 2 mal einreichen (entfernen document.getElementById („ContactUs_form“) einreichen();. innerhalb submitForm Funktion) –

+0

was erwarten Sie zu sehen, wenn das Formular abgeschickt wird? – andi

+0

Sie tun nichts, um die natürliche Unterwerfung des Formulars zu verhindern. – j08691

Antwort

1

JavaScript blockiert alles. Der Browser wird das DOM nicht neu zeichnen, eine andere Funktion ausführen (z. B. als Reaktion auf ein Ereignis) oder zu einer neuen Seite navigieren, bis die aktuelle Funktion die Ausführung beendet hat.

Jede Navigation ist trotzdem asynchron. Der Browser muss warten, bis die Antwort ankommt, falls der Server 204 No Content sagt. Erst nachdem eine Antwort auf eine neue Seite eingeht, beginnt das Entladen der Seite.

Verwandte Themen