jquery - jQuery 验证动态创建的 reCaptcha 表单
问题描述
我正在使用此验证表单:
$(document).ready(function() {
$('form.brochure_form').validate();
});
我目前正在使用它动态创建不可见的recaptcha(这无需验证即可工作)。
function onloadCallback() {
var count = 1;
$(".g-recaptcha").each(function() {
var object = $(this);
var theid = object.attr('id');
var widgetID = "recaptcha_" + count;
grecaptcha.render("recaptcha_" + count, {
"sitekey" : "SITEKEY",
"callback" : function(token) {
object.parents('form').find(".g-recaptcha-response").val(token);
// VALIDATE HERE
if(object.parents('form').valid() == true){
object.parents('form').submit();
} else {
grecaptcha.reset(widgetID);
};
}
});
count++;
});
}
目前这就是它的工作原理;
- 使用 reCaptcha 验证表单
- 表单运行 jQuery 验证
- 提交
问题是如果表单验证 #1 然后在 #2 上失败,我需要重置 reCaptcha 以再次执行此操作(这是我正在努力的地方,因为我无法正确传递 widgetID - 如果我将此留空,它适用于第一个仅限表格)
我的理想方案是切换#1 和#2,但我也无法正常工作。
此外,上述内容目前返回
Uncaught (in promise) null
这是供参考的 HTML(删除了所有字段,因为它是一个相当大的表单)
<form id="form--brochure1" class="brochure_form " action="" method="post">
<input type="submit" value="Submit" class="g-recaptcha" id="recaptcha_1" data-badge="inline">
</form>
<form id="form--brochure2" class="brochure_form " action="" method="post">
<input type="submit" value="Submit" class="g-recaptcha" id="recaptcha_2" data-badge="inline">
</form>
该页面只是在提交时刷新,但我正在执行服务器端验证,如下所示:
if(isset($_POST['g-recaptcha-response'])) {
$secretKey = 'SECRETKEY';
$response = $_POST['g-recaptcha-response'];
$remoteIp = $_SERVER['REMOTE_ADDR'];
$reCaptchaValidationUrl = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$response&remoteip=$remoteIp");
$result = json_decode($reCaptchaValidationUrl, TRUE);
if($result['success'] == 1) {
// EMAIL SENT, DATABASE UPDATED ETC HERE
}
}
解决方案
推荐阅读
- html - 将 HTML 元素(固定)放置在另一个元素的顶部,不重叠,在窗口调整大小时保持恒定间距
- react-native-ios - 反应本机中底部TabNavigator下方的空白
- sql - 在 PostgreSQL 中查找具有当前季节日期的所有行
- file - Freepascal 简单的输入/输出数字游戏
- snowflake-cloud-data-platform - 我们可以在 Snowsight 中创建过滤器层次结构吗?
- reactjs - 在计算距离之前等待用户定位 - 重构为异步函数
- flutter - 如何更改 TextFormField 上错误字段的背景?
- typescript - 如何在带有打字稿的 vue.js 中使用 javascript 组件?
- reactjs - 使用微前端概念在应用程序中动态注册路由时出现问题
- reactjs - 带有 create-react-app 的 URL 中的尾部斜杠是否重要?