Javascript在之后不执行。然后

Javascript在之后不执行。然后,javascript,getelementbyid,recaptcha-v3,Javascript,Getelementbyid,Recaptcha V3,我试图将recaptcha v3放在表单上,但是在第一次提交时,将令牌插入到隐藏的输入字段中是行不通的 这是我修改过的代码。我添加了一个警报并停止了sumbit以查看发生了什么。此代码位于单独的bundle.js文件中 var form = document.querySelector('#contact-form'); var inputs = form.querySelectorAll('input'); $(form).submit(function(e) { e.preventDef

我试图将recaptcha v3放在表单上,但是在第一次提交时,将令牌插入到隐藏的输入字段中是行不通的

这是我修改过的代码。我添加了一个警报并停止了sumbit以查看发生了什么。此代码位于单独的bundle.js文件中

var form = document.querySelector('#contact-form');
var inputs = form.querySelectorAll('input');
$(form).submit(function(e) {
  e.preventDefault();
  grecaptcha.ready(function() {
    grecaptcha.execute('secret_key', {
      action: 'my_action'
    }).then(function(token) {
      document.getElementById('tokenField').value = token;
      alert('token is; ' + token); // inserted for troubleshooting
    });
  });
  removeMessageBox();
  validation();
  var alerts = document.querySelectorAll('.alert-text');
  if (alerts.length == 0) {
    // document.forms['contact-form'].submit(); 
  }
});
编写此代码后,警报将显示有效的令牌,但令牌字段没有值。tokenField在您按下警报上的OK后获取令牌。有什么问题???我什么都试过了

如果取出警报并取消对提交的注释,则提交时标记字段为空

请注意,此脚本还调用
validation()
removeMessageBox()
,这将删除验证错误消息


如果validation()出于某种原因停止提交,您可以修复问题,再次提交,tokenField会得到它的值,一切都很好-第二次。

据我所知,该字段是在回调中设置的,而其他函数是在主函数中运行的。您可以将所有代码放入
函数的回调函数中,然后
函数,或者使用

回拨 异步的
removeMessageBox()
开头的所有内容都不会等待recaptcha。我使用了回调,它就像一个champ!非常感谢你。我知道这一定是一个简单的新手错误。再次感谢。
$(form).submit(function(e) {
  e.preventDefault();
  grecaptcha.ready(function() {
    grecaptcha.execute('secret_key', {
      action: 'my_action'
    }).then(function(token) {
      document.getElementById('tokenField').value = token;
      
      removeMessageBox();
      validation();
      var alerts = document.querySelectorAll('.alert-text');
      if (alerts.length == 0) {
        // document.forms['contact-form'].submit(); 
      }
    });
  });
});
$(form).submit(function(e) {
  e.preventDefault();
  grecaptcha.ready(async function() {
    const token = await grecaptcha.execute('secret_key', {
      action: 'my_action'
    });

    document.getElementById('tokenField').value = token;

    removeMessageBox();
    validation();
    var alerts = document.querySelectorAll('.alert-text');
    if (alerts.length == 0) {
      // document.forms['contact-form'].submit(); 
    }
  });
});