我怎样才能validation谷歌reCAPTCHA V2使用javascript / jQuery?
我在aspx中有一个简单的联系表单。 我想在提交表单之前validationreCaptcha(客户端)。 请帮忙。
示例代码:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Test Form</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css"> <script src="//code.jquery.com/jquery-1.10.2.js"></script> <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script> <link rel="stylesheet" href="/resources/demos/style.css"> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <script> $("#cmdSubmit").click(function () { //need to validate the captcha }); </script> </head> <body> <form id="form1" runat="server"> <label class="clsLabe">First Name<sup>*</sup></label><br /> <input type="text" id="txtFName" name="txtFName" class="clsInput" /><br /> <div class="g-recaptcha" data-sitekey="my_key"></div> <img id="cmdSubmit" src="SubmitBtn.png" alt="Submit Form" style="cursor:pointer;" /> </form> </body> </html>
我想validationcmdSubmit
点击validation码。
请帮忙。
客户端validationreCaptcha – 以下为我工作:
“grecaptcha.getResponse();”如果reCaptcha未在客户端validation,则返回null,否则返回非null值。
Javascript代码:
var response = grecaptcha.getResponse(); if(response.length == 0) //reCaptcha not verified else //reCaptch verified
使用此来validation简单的JavaScript的谷歌validation码。
这个代码在html身上:
<div class="g-recaptcha" id="rcaptcha" style="margin-left: 90px;" data-sitekey="my_key"></div> <span id="captcha" style="margin-left:100px;color:red" />
这段代码放在头部调用get_action(this)方法的表单button:
function get_action(form) { var v = grecaptcha.getResponse(); if(v.length == 0) { document.getElementById('captcha').innerHTML="You can't leave Captcha Code empty"; return false; } else { document.getElementById('captcha').innerHTML="Captcha completed"; return true; } }
如果您在callback中呈现了Recaptcha
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
使用一个空的DIV作为占位符
<div id='html_element'></div>
那么你可以指定一个成功的CAPTCHA响应的可选函数调用
var onloadCallback = function() { grecaptcha.render('html_element', { 'sitekey' : 'your_site_key', 'callback' : correctCaptcha }); };
然后,将会将recaptcha响应发送到“correctCaptcha”function。
var correctCaptcha = function(response) { alert(response); };
所有这一切都来自Google API的说明:
Google Recaptcha v2 API说明
我有点不确定你为什么要这样做。 通常情况下,您将发送g-recaptcha-response字段和您的私钥以安全地validation服务器端。 除非你想在recaptcha成功之前禁用提交button,否则上述情况应该起作用。
希望这可以帮助。
保罗
简单的保罗的答案是:
资源:
<script src="https://www.google.com/recaptcha/api.js"></script>
HTML:
<div class="g-recaptcha" data-sitekey="YOUR_KEY" data-callback="correctCaptcha"></div>
JS:
var correctCaptcha = function(response) { alert(response); };
我使用HarveyEV的解决scheme,但误解了它,并使用jQueryvalidation,而不是Bootstrapvalidation程序。
<script src="ajax/jquery.validate/1.14.0/jquery.validate.min.js"></script> <script> $("#contactForm").validate({ submitHandler: function (form) { var response = grecaptcha.getResponse(); //recaptcha failed validation if (response.length == 0) { $('#recaptcha-error').show(); return false; } //recaptcha passed validation else { $('#recaptcha-error').hide(); return true; } } }); </script>
您可以使用以下代码呈现您的recaptcha
<div id="recapchaWidget" class="g-recaptcha"></div> <script type="text/javascript"> var widId = ""; var onloadCallback = function () { widId = grecaptcha.render('recapchaWidget', { 'sitekey':'Your Site Key' }); }; </script> <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
然后,您可以通过使用“IsRecapchaValid()”方法validation您的recaptcha,如下所示。
<script type="text/javascript"> function IsRecapchaValid() { var res = grecaptcha.getResponse(widId); if (res == "" || res == undefined || res.length == 0) { return false; } return true; } </script>
我在Bootstrapvalidation器中使用了Palek的解决scheme,它工作。 我会添加一个评论给他,但我没有代表;)。 简化版本:
$('#form').validator().on('submit', function (e) { var response = grecaptcha.getResponse(); //recaptcha failed validation if(response.length == 0) { e.preventDefault(); $('#recaptcha-error').show(); } //recaptcha passed validation else { $('#recaptcha-error').hide(); } if (e.isDefaultPrevented()) { return false; } else { return true; } });
我认为他们都是伟大的,但我有麻烦,实际上让他们与JavaScript和C#工作。 这是我做的。 希望它可以帮助别人。
//put this at the top of the page <script src="https://www.google.com/recaptcha/api.js"></script> //put this under the script tag <script> var isCaptchaValid = false; function doCaptchaValidate(source, args) { args.IsValid = isCaptchaValid; } var verifyCallback = function (response) { isCaptchaValid = true; }; </script> //retrieved from google and added callback <div class="g-recaptcha" data-sitekey="sitekey" data-callback="verifyCallback"> //created a custom validator and added error message and ClientValidationFucntion <asp:CustomValidator runat="server" ID="CustomValidator1" ValidationGroup="Initial" ErrorMessage="Captcha Required" ClientValidationFunction="doCaptchaValidate"/>