我在表单上使用谷歌的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((开始执行之前运行完成。