javascript - 使用 Google reCAPTCHA 验证表单提交

标签 javascript html validation captcha recaptcha

我看过这个问题

How to Validate Google reCaptcha on Form Submit

并尝试将该问题的答案实现到我的代码中以验证我的表单,以便在验证码尚未完成时不会提交。

但是没有任何反应 - 它只是提交表单。

这是我的代码:

 <head>

        <script type="text/javascript">
  var onloadCallback = function() {
    grecaptcha.render('html_element', {
      'sitekey' : 'my_site_key'
    });
  };
</script>

 </head>

          <div id="html_element"></div>
      <br>

      <input type="submit" value="Submit" onclick="myFunction">

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer>
function myFunction() {    
if(grecaptcha.getResponse() == "")
    alert("You can't proceed!");
else
    alert("Thank you");}
 </script>

有人能帮忙吗?

编辑

<html>
<head>
        <script type="text/javascript">

var onloadCallback = function() {
    grecaptcha.render('html_element', {
    'sitekey' : 'site-key'
  });
};
onloadCallback();

$('form').on('submit', function(e) {
  if(grecaptcha.getResponse() == "") {
    e.preventDefault();
    alert("You can't proceed!");
  } else {
    alert("Thank you");
  }
});
           </script>
</head>
<body>
        <form action="?" method="POST">
      <div id="html_element"></div>
      <br>
      <input type="submit" value="Submit">
    </form>


<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer>

 </script>
    </body>

最佳答案

您需要在事件 中触发您的if 语句。如果您使用的是 jQuery,则可以非常轻松地做到这一点:

$('form').on('submit', function(e) {
  if(grecaptcha.getResponse() == "") {
    e.preventDefault();
    alert("You can't proceed!");
  } else {
    alert("Thank you");
  }
});

请参阅此处的工作示例:JSFiddle

在 JavaScript 中这样做的问题在于,如果用户愿意,他们可以很容易地伪造结果。如果您真的想检查用户是否是机器人,您仍然应该使用您的 reCAPTCHA key 在服务器端比较用户(通过 POST)提交的结果。

关于javascript - 使用 Google reCAPTCHA 验证表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34133270/

相关文章:

javascript - 如何使用 codeIgniter 和脚本动态添加字段?

javascript - 有没有办法禁用 tab 键操作?

javascript - 从外部 iframe 启动全屏

html - html <a> 标签中的 "a"代表什么?

validation - 使用基于远程属性的验证时必须双重提交

javascript - 嵌入在我的电脑中下载的视频而不是 youtube 链接

javascript - 禁用 ng-click 和 ng-repeat

javascript - 从动态表单获取数据到javascript并返回计算

java - 有谁知道 X.509 证书中的哪些所有字段用于验证数字签名?

java - 如何禁止 JTextField 中的特殊字符