javascript - grecaptcha - recaptcha v2 example




Google reCaptcha сброс не работает (2)

Я хочу сбросить виджет Google reCaptcha, когда я отправляю свою форму через AJAX и получаю некоторые ошибки ввода или отправка формы. Я использую несколько виджетов на одной странице, поэтому я отображаю эти виджеты явно.

Мой HTML код:

<div class="g-recaptcha" id="recaptcha-1"></div>
<div class="g-recaptcha" id="recaptcha-2"></div>
...
<div class="g-recaptcha" id="recaptcha-20"></div>

Загрузка виджета

<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>

После отправки формы:

var id = $('.g-recaptcha', form).attr('id');
grecaptcha.reset(id);

Форма является экземпляром представленной формы.

Все работает нормально, если форма заполнена правильно. Но reCaptcha не сбрасывает и не перезагружает. Попробуйте этот grecaptcha.reset() но grecaptcha.reset() .

Любая идея?


Вы передаете неправильный идентификатор.

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

Ваш селектор захватит все 20 виджетов reCaptcha, но вернет только один идентификатор DOM (первый reCaptcha). Таким образом, ваш код на самом деле сбрасывает первый recaptcha.


Метод grecaptcha.reset() принимает необязательный параметр widget_id , и по умолчанию используется первый созданный виджет, если он не widget_id . widget_id возвращается из grecaptcha.render() для каждого созданного виджета. Поэтому вам нужно сохранить этот идентификатор и использовать его для сброса этого конкретного виджета:

var widgetId = grecaptcha.render(container);
grecaptcha.reset(widgetId);

Смотрите здесь .







recaptcha