2016-08-06 13 views
0

Ich benutze Googles reCAPTCHA auf einem Formular und nach jedem Senden muss ich es zurückgesetzt, weil, wenn die serverseitige Validierung fehlschlägt und der Benutzer das gleiche Formular, das Captcha erneut übermittelt wird ungültig sein. Ich benutze plain javascript, nicht mit Ajax/Jquery, das Formular öffnet eine neue Seite (anstatt die aktuelle Seite neu zu laden). Hier ist mein Code:Zurücksetzen Formular Captcha zurückgesetzt, bis nach Senden() ausgeführt

document.getElementById('myform').addEventListener('submit', function(event) { 
    event.preventDefault(); 
    this.submit(); 
    setTimeout(function(){ grecaptcha.reset(myCaptcha); }, 0); 
} 

I setTimeout bin mit dem Reset-Code in der Ereignisschleife Warteschlange einzureihen.

Meine Frage ist, wird das jedes Mal funktionieren? Ist submit() synchron, d. H. Es wird immer vor dem ausgeführt, was in der Ereignisschleifenwarteschlange ist?

Antwort

1

Ja! Siehe here:

JavaScript ist immer synchron und single-threaded. Wenn Sie einen JavaScript-Code auf einer Seite ausführen, wird derzeit kein anderes JavaScript auf dieser Seite ausgeführt.

Also wird this.submit() vollständig ausgeführt, bevor setTime() mit der Ausführung beginnt.