Javascript在之后不执行。然后
我试图将recaptcha v3放在表单上,但是在第一次提交时,将令牌插入到隐藏的输入字段中是行不通的 这是我修改过的代码。我添加了一个警报并停止了sumbit以查看发生了什么。此代码位于单独的bundle.js文件中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
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();
}
});
});