将表单captcha重置延迟到submit()执行之后

Deferring form captcha reset until after submit() has executed

本文关键字:submit 执行 之后 迟到 延迟 表单 captcha      更新时间:2023-09-26

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

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

我使用setTimeout将重置代码放入事件循环队列中。

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

是!请参阅此处:

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

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