我遇到了和你一样的问题,就是这样解决的:
首先声明一个存储1或0的变量,这取决于用户是否正确填写了验证码。
var allowSubmit = false;
那么你需要一个在用户正确填写 reCapcha 时执行的函数:
function capcha_filled () {
allowSubmit = true;
}
...以及在 reCapcha 会话到期时执行的函数:
function capcha_expired () {
allowSubmit = false;
}
要告诉 reCapcha 您的函数(回调),请在您的 html 中设置 data-attributes:
<div class="g-recaptcha"
data-callback="capcha_filled"
data-expired-callback="capcha_expired"
data-sitekey="your site key"></div>
或者如果你使用显式加载:
var onloadCallback = function() {
grecaptcha.render('your_div_id', {
'sitekey' : 'your_site_key',
'callback': capcha_filled,
'expired-callback': capcha_expired,
});
};
表单提交还需要回调:
function check_if_capcha_is_filled (e) {
if(allowSubmit) return true;
e.preventDefault();
alert('Fill in the capcha!');
}
最后在表单中添加onsubmit属性:
<form action="..." onsubmit="check_if_capcha_is_filled">
注意:如 cmets 中所述,仍需要服务器验证。该代码可防止意外提交表单,除非验证码已填写且仅为了方便用户使用。