2016-05-04 2 views
47

Я использую recaptcha с моим приложением laravel.Ошибка: элемент заполнителя ReCAPTCHA должен быть пустым

Я просто хочу проверить ответ recaptcha на отправку формы с помощью jquery и остановить пользователя по предупреждению, чтобы проголосовать за проверку 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> 

Я получаю эту ошибку в консоли браузера, и форма получает submit.

Error: ReCAPTCHA placeholder element must be empty 
+0

Работает ли это: '' Если нет, вы включаете скрипт дважды в несчастный случай? –

ответ

116

Вы загружаете библиотеку google 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

Просто Youse это для каждого капчи на странице, если вам нужна динамическая включая:

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

Но он медленный. Вы также можете определить все recaptchas на странице изначально: https://developers.google.com/recaptcha/docs/display

-1

Та же проблема может быть вызвана медленным подключением к Интернету.

 Смежные вопросы

  • Нет связанных вопросов^_^