2017-03-03 92 views
2

我有很多reCAPTCHA的誰動態呈現,有時有2個有時50取決於頁面。 我已經做了渲染這個:谷歌reCAPTCHA重置函數調用呈現多個驗證碼

<script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit" async defer></script> 
var CaptchaCallback = function(){ 
    $('.g-recaptcha').each(function(index, el) { 
     grecaptcha.render(el, {'sitekey' : 'myKey'}); 
    }); 
}; 

而且放置在此,我要顯示驗證碼:

<div class="g-recaptcha" data-sitekey="myKey"></div> 

我有Ajax調用,即提交表單數據process.php,如果表單數據沒有通過驗證返回的自定義錯誤

$.ajax({ 
    type  : 'POST', 
    url   : 'process.php', 
    data  : $(this).serialize(), 
    dataType : 'json' 
}) 
    .done(function(data) { 
     if (! data.success) { ... 

它按預期工作,但現在我想顯示消息的用戶作爲驗證的一部分,如果他忘了要解決驗證碼。

隨着

var response = grecaptcha.getResponse(); 
if(response.length == 0){ 
    $('.result').append('Captcha incorrect, please click I am not robot'); 
} 

和重置驗證碼添加此波紋管

if (! data.success) { 
     grecaptcha.reset(); 

這是什麼做的是:驗證碼復位如果用戶沒有完成所有形式的有效。

這一切只適用於第一次出現reCAPTCHA。 我需要它以某種方式告訴它只重置當前正在使用的驗證碼。

我最好的猜測是與

var form = $(this); //get current form 
grecaptcha.reset(form); 

嘗試它不會工作,因爲我需要件ID,並沒有形成。 你能幫我嗎?

回答

1

https://stackoverflow.com/a/41860070/7327467

復位所有學分與

var form = $(this); //store current form 

var response = grecaptcha.getResponse(jQuery(form).find('#data-widget-id').attr('data-widget-id')); 
if(response.length == 0){ //append error to result div 
    form.find('.result').append('<div class="alert alert-danger">' + "Captcha incorrect" + '</div>'); } 

和重置驗證碼完成的,我已經添加了這個,而不是以前的 「grecaptcha.reset();」

grecaptcha.reset(jQuery(form).find('#data-widget-id').attr('data-widget-id')); 

希望這會有所幫助。