Javascript 将表单验证码重置延迟到执行submit()之后

Javascript 将表单验证码重置延迟到执行submit()之后,javascript,forms,Javascript,Forms,我在表单上使用Google的reCAPTCHA,每次提交后我都需要重置它,因为如果服务器端验证失败,用户重新提交同一表单,验证码将无效。我使用的是纯javascript,而不是ajax/jquery,表单会打开一个新页面(而不是重新加载当前页面)。这是我的密码: document.getElementById('myform').addEventListener('submit', function(event) { event.preventDefault(); this.su

我在表单上使用Google的reCAPTCHA,每次提交后我都需要重置它,因为如果服务器端验证失败,用户重新提交同一表单,验证码将无效。我使用的是纯javascript,而不是ajax/jquery,表单会打开一个新页面(而不是重新加载当前页面)。这是我的密码:

document.getElementById('myform').addEventListener('submit', function(event) {
    event.preventDefault();
    this.submit();
    setTimeout(function(){ grecaptcha.reset(myCaptcha); }, 0);
}
我正在使用
setTimeout
将重置代码放入事件循环队列中

我的问题是,这种方法每次都有效吗?是同步的,即它总是在事件循环队列中的任何内容之前执行?

是!见:

JavaScript始终是同步的和单线程的。如果在页面上执行JavaScript代码块,则当前不会执行该页面上的其他JavaScript

因此,这个.submit()将在setTime()开始执行之前运行到完成。

是!见:

JavaScript始终是同步的和单线程的。如果在页面上执行JavaScript代码块,则当前不会执行该页面上的其他JavaScript

因此,这个.submit()将在setTime()开始执行之前运行到完成