Подключаю скрипт гугл каптчи
Код |
---|
<sc ript class="g-recaptcha-script" src="https://www.google.com/recaptcha/api.js onl oad=onloadCallbackGoogleRecaptcha&render=explicit" async defer></sc ript> |
Код |
---|
<div class="g-recaptcha-dynamic-initialized" id="g-recaptcha-dynamic-initialized1"></div> еще одна форма <div class="g-recaptcha-dynamic-initialized" id="g-recaptcha-dynamic-initialized2"></div> |
Таких форм несколько и гугл каптч будет тоже несколько
Теперь запускается функция: onloadCallbackGoogleRecaptcha
Код |
---|
var allCapthaForms = new Array() var onloadCallbackGoogleRecapt cha = function() { var wss = document.getElementsByClassName('g-recaptcha-dynamic-initialized') Array.prototype.filter.call(wss, function(ws, i){ id = ws.getAttribute('id') w=grecaptcha.render(id, { 'sitekey' : '<?=RE_SITE_KEY?>', }) allCapthaForms.push(w) }); }; |
Что она делает: инициализирует гугл каптчи и запоминает widget_id в массив allCapthaForms
Затем когда форма отправляется на сервер, через ajax, форма перезагружается и иницилазированная капча пропадает, ее нужно инициализировать заново, для этого написал это:
Код |
---|
var resetAllCapthaForms=function () { allCapthaForms.forEach(function (item) { grecaptcha.reset(item) }) onloadCallbackGoogleRecaptcha() } |
здесь я пытаюсь перебрать массив allCapthaForms и сделать grecaptcha.reset(item) каждой капчти, а затем снова запустить рендеринг функцией onloadCallbackGoogleRecaptcha()
НО! Все работает если форма одна! Но если форм больше одной, то я получаю ошибку:
Код |
---|
recaptcha__ru.js:596 Uncaught Error: reCAPTCHA has already been rendered in this element at Object.$l [as render] (recaptcha__ru.js:596) at (index):2393 at HTMLCollection.filter () at onloadCallbackGoogleRecaptcha ((index):2391) at resetAllCapthaForms ((index):2403) at :2:9 at Function.BX.evalGlobal (kernel_main_v1.js?1549274874311659:15) at Function.BX.evalPack (kernel_main_v1.js?1549274874311659:15) at parent.bxcompajaxframeonload ((index):98) at kernel_main_v1.js?1549274874311659:23 |
Как я понимаю функция grecaptcha.reset(item) сбрасывает только первую форму. А остальные не хочет. На всех сайтах только и пишут про эту функцию а в качестве параметра ей передавать widget_id что я и делаю. Или что то все таки упускаю?