I just installed recaptcha v3 on a form and I noticed that the submit button needs to be clicked 2x to make it work.
<script>
$('#newsletterForm').submit(function (event) {
event.preventDefault();
var email = $('#email').val();
var name = $('#name').val();
var phone = $('#phone').val();
var message = $('#message').val();
grecaptcha.ready(function () {
grecaptcha.execute('mytokenhere', { action: 'subscribe_newsletter' }).then(function (token) {
$('#newsletterForm').prepend('<input type="hidden" name="token" value="' + token + '">');
$('#newsletterForm').prepend('<input type="hidden" name="action" value="subscribe_newsletter">');
$('#newsletterForm').unbind('submit').submit();
});;
});
});
</script>
On Stackoverflow I found an alternate solution but it comes up with an error Uncaught Error: No reCAPTCHA clients exist.
<script>
var alreadySubmitted = false;//adding a extra variable to check already submitted.
$("#newsletterForm").submit(function (event) {
if (grecaptcha.getResponse() && alreadySubmitted) {
// 2) finally sending form data
alreadySubmitted = true;
$("#newsletterForm").submit(); // here you are doing wrong
} else {
grecaptcha.reset();
console.log('validation completed.');
event.preventDefault(); //prevent form submit before captcha is completed
var email = $('#email').val();
var name = $('#name').val();
var phone = $('#phone').val();
var message = $('#message').val();
grecaptcha.execute('mytokenhere', { action: 'subscribe_newsletter' }).then(function (token) {
$('#newsletterForm').prepend('<input type="hidden" name="token" value="' + token + '">');
$('#newsletterForm').prepend('<input type="hidden" name="action" value="subscribe_newsletter">');
$('#newsletterForm').unbind('submit').submit();
});;
}
});
</script>