2016-05-04 19 views
47

Sto utilizzando recaptcha con la mia applicazione laravel.Errore: l'elemento segnaposto ReCAPTCHA deve essere vuoto

Voglio solo controllare la risposta di recaptcha sul modulo di invio utilizzando jquery e interrompere l'utente con avviso che convalida il captcha.

ma, non ho potuto interrompere l'invio del modulo anche se captcha non è stato riempito.

ecco il mio codice.

$('#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> 

Ricevo questo errore nella console del browser e il modulo viene inviato.

Error: ReCAPTCHA placeholder element must be empty 
+0

Questo funziona: '' In caso contrario, includi lo script due volte su forse per caso? –

risposta

116

Si sta caricando la libreria google recaptcha due volte.

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

+0

Ho lo stesso problema .. e quando vedo Google Chrome console vedo che api.js viene caricato una volta, ma recaptcha__es.js viene caricato tre volte. Quale potrebbe essere il problema qui? – jstuardo

+2

Come impedire che lo script venga caricato due volte? Dato che è caricato di default quando '<% = recaptcha_tags%>' è visualizzato in Ruby. – Farhad

3

Sto usando ContactForm7 per Wordpress, che ha un built-in di integrazione con Recaptcha. Ho anche il plugin BWP Recaptcha, che usa le stesse librerie di ricaptcha. Ho erroneamente aggiunto le mie chiavi di attivazione a entrambi, il che causava il caricamento della libreria js due volte. Una volta rimosse le chiavi dal plugin CF7, l'errore è andato via.

1
WARNING: Tried to load angular more than once. 

In AngularJs questo errore causa tali problemi È possibile controllare jquery allo stesso modo.

3

si sta caricando la libreria 2 volte

scelto

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

o

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

Proprio Youse questo per ogni captcha alla pagina se avete bisogno di dinamica tra cui:

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

Ma è lento. È inoltre possibile definire tutti i ricaptchas all'inizio della pagina: https://developers.google.com/recaptcha/docs/display

-1

Lo stesso problema può essere causato a causa della connessione Internet lenta.