首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌reCaptcha重置不起作用

谷歌reCaptcha重置不起作用
EN

Stack Overflow用户
提问于 2015-05-05 04:07:11
回答 5查看 55.8K关注 0票数 30

我想要重置谷歌reCaptcha小部件时,我通过AJAX提交我的表单,并有一些输入错误或表单被发送。我在同一个页面上使用了多个小部件,所以我显式地呈现这些小部件。

我的HTML代码:

代码语言:javascript
复制
<div class="g-recaptcha" id="recaptcha-1"></div>
<div class="g-recaptcha" id="recaptcha-2"></div>
...
<div class="g-recaptcha" id="recaptcha-20"></div>

正在加载小部件

代码语言:javascript
复制
<script src="https://www.google.com/recaptcha/api.js?onload=reCaptchaCallback&render=explicit&hl=en" async defer></script>
<script>
    var reCaptchaCallback = function() {
        var elements = document.getElementsByClassName('g-recaptcha');
        for (var i = 0; i < elements.length; i++) {
            var id = elements[i].getAttribute('id');
            grecaptcha.render(id, {
                'sitekey' : 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
            });
        }
    };
</script>

提交表单后:

代码语言:javascript
复制
var id = $('.g-recaptcha', form).attr('id');
grecaptcha.reset(id);

表单是已提交表单的实例。

当表单填写正确时,一切工作正常。但是reCaptcha不会重置或重新加载。它尝试此grecaptcha.reset(),但没有结果。

有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-05-05 04:27:45

grecaptcha.reset()方法接受可选的widget_id参数,如果未指定,则默认为创建的第一个小部件。对于创建的每个小部件,grecaptcha.render()方法都会返回一个widget_id。因此,您需要存储此id,并使用它来重置特定的小部件:

代码语言:javascript
复制
var widgetId = grecaptcha.render(container);
grecaptcha.reset(widgetId);

See here

票数 44
EN

Stack Overflow用户

发布于 2015-05-05 05:57:41

您正在传递错误的id。

$('.g-recaptcha', form).attr('id');

您的选择器将捕获所有20个reCaptcha小部件,但只返回单个DOM id (第一个reCaptcha)。所以你的代码实际上是在重置第一个recaptcha。

票数 1
EN

Stack Overflow用户

发布于 2017-04-19 19:00:51

刚刚编辑了您的代码以创建一个动态窗口小部件。

代码语言:javascript
复制
<script>
    var reCaptchaCallback = function() {
        var elements = document.getElementsByClassName('g-recaptcha');
        for (var i = 0; i < elements.length; i++) {                
            widgetId+i = grecaptcha.render('recaptcha-'+i, {
                'sitekey' : 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
            });
        }
    };
</script>

在成功完成上述任务之后,更改AJAX成功:响应

代码语言:javascript
复制
grecaptcha.reset(widgetId+id);

这里的id与从下面的for循环生成的id相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30039035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档