2016-05-04 44 views
47

我正在使用recaptcha和我的laravel應用程序。錯誤:ReCAPTCHA佔位符元素必須爲空

我只想檢查使用jquery的表單提交的recaptcha的響應,並通過提醒驗證驗證captcha停止用戶。

但是,即使captcha未填寫,我也無法停止表單提交。

這是我的代碼。

$('#payuForm').on('submit', function (e) { 

        var response = grecaptcha.getResponse(); 

        if(response.length == 0 || response == '' || response ===false) { 
         alert('Please validate captcha.'); 
         e.preventDefault(); 
        } 
       }); 



<div class="captcha"> 
{{ View::make('recaptcha::display') }} 
</div> 

我在瀏覽器控制檯中得到這個錯誤,表單被提交。

Error: ReCAPTCHA placeholder element must be empty 
+0

這是否工作:''如果不是,您是否包含腳本兩次意外事件? –

回答

116

您正在加載谷歌recaptcha庫兩次。

https://www.google.com/recaptcha/api.js

+0

我有同樣的問題..當我看到Google Chrome控制檯時,我看到api.js加載一次,但是recaptcha__es.js加載了三次。這裏可能是什麼問題? – jstuardo

+2

如何防止腳本被加載兩次?由於在Ruby中呈現'<%= recaptcha_tags%>'時默認加載。 – Farhad

3

我使用ContactForm7 WordPress的,它有一個內置的使用reCAPTCHA集成。我也有BWP Recaptcha插件,它使用相同的recaptcha庫。我錯誤地將我的激活密鑰添加到了兩個,這是導致js庫加載兩次。一旦我從CF7插件中刪除了密鑰,錯誤消失了。

1
WARNING: Tried to load angular more than once. 

在AngularJs中這個錯誤導致了這樣的問題你也可以檢查jquery。

3

您加載庫2倍

選擇

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script> 

 <script src="https://www.google.com/recaptcha/api.js" async defer></script> 
0

只是憂色這種在頁面中的每個驗證碼,如果你需要動態包括:

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" 
      async defer> 
    </script> 

    <div class="g-recaptcha"></div> 

    <script> 
     var onloadCallback = function() { 
      //remove old 
      $('.g-recaptcha').html(''); 

      $('.g-recaptcha').each(function (i, captcha) { 
       grecaptcha.render(captcha, { 
        'sitekey' : 'your key' 
       }); 
      }); 
     }; 
    </script> 

但它很慢。您也可以在頁面初始定義所有的恢復代碼: https://developers.google.com/recaptcha/docs/display

-1

由於互聯網連接速度慢,可能會導致相同的問題。

相關問題