javascript - grecaptcha - recaptcha v2 example




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

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

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

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

Я хочу сбросить виджет 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() .

Любая идея?


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

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

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





recaptcha