Я много искал, но не могу понять, как проверить новый reCaptcha перед представлением формы вместе с функцией проверки правильности плагин проверки jQuery.
Я имею в виду что-то вроде этого:
$.validator.addMethod('reCaptchaMethod', function (value, element, param) {
if (grecaptcha.getResponse() == ''){
return false;
} else {
// I would like also to check server side if the recaptcha response is good
return true
}
}, 'You must complete the antispam verification');
$("#form").validate({
rules: {
name: {
required: true,
minlength: 2
},
email: {
required: true,
email: true
},
reCaptcha: {
reCaptchaMethod: true
}
},
messages: {
name: "Please fill your name",
email: "Please use a valid email address"
},
submitHandler : function () {
$.ajax({
type : "POST",
url : "sendmail.php",
data : $('#form').serialize(),
success : function (data) {
$('#message').html(data);
}
});
}
});
В нескольких словах я хотел бы проверить serveride с помощью удаленного метода, если пользователь прошел проверку recaptcha перед отправкой формы, а также другие правила проверки.
Я могу проверить ответ recaptcha AFTER (на sendmail.php), но было бы лучше иметь ответ проверки recaptcha вместе с другими проверками полей.
Основная причина заключается в улучшении пользовательского интерфейса, причем все поля проверяются сразу.
Мне удалось добиться чего-то, перемещающего чек внутри submitHandler:
submitHandler : function () {
if (grecaptcha.getResponse() == ''){
// if error I post a message in a div
$( '#reCaptchaError' ).html( '<p>Please verify youare human</p>' );
} else {
$.ajax({
type : "POST",
url : "sendmail.php",
data : $('#form').serialize(),
success : function (data) {
$('#message').html(data);
}
});
}
}
Но мне не нравятся по двум причинам: 1) Я просто проверяю, заполнен ли recaptcha, а не если он действителен. 2) Пользователь чувствует себя как двухэтапная проверка.
В этом ответе они говорят, что можно сделать рендеринг Recaptcha при обратном вызове, чтобы указать вызов функции при успешном ответе CAPTCHA.
Я попытался реализовать это, но я не смог использовать это решение в правиле функции validate().
Любые подсказки приветствуются!