2016-03-21 3 views
0

Здесь у меня простая форма в jsp. Я хочу, чтобы как reCAPTCHA, так и текстовое поле были обязательными. В настоящее время, если я просто заполню текстовое поле и нажмите «Войти», он по-прежнему отправляет данные. Как я могу сделать reCAPTCHA необходимым, то есть обязательным?ReCAPTCHA validation

<!DOCTYPE html> 
<html lang="en"> 
<head> 

<script src='https://www.google.com/recaptcha/api.js'></script> 

</head> 

<body> 

<label> Form </label> 

<form action = "somefile" method = "post"> 

    <input = "text" name = "textbox1" required> 

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

    <button type="submit" name="login">Sign In</button> 

</form> 

</body> 
</html> 
+1

[* Прочитайте документацию *] (http://webdesign.tutsplus.com/tutorials/how-to-integrate-no-captcha-recaptcha-in-your-website--cms-23024), вы должны проверить на стороне сервера или просмотреть ответ с сервера после отправки формы, вы не можете проверить заранее (иначе было бы довольно легко победить). – RobG

+0

Okaaaay. Получил его –

+0

Что это связано с плагином jQuery Validate? Пожалуйста, используйте только теги, которые отражают содержание вашего вопроса; все остальное считается тегом-спамом. Ред. Благодарю. – Sparky

ответ

1

Вы можете определенно сделать reCaptcha необходимым с помощью javascript. Конечно, вам все равно нужно проверить серверный сервер reCaptcha, но это добавит некоторую проверку на стороне клиента.

  • Вам нужна переменная JavaScript, чтобы отслеживать, была ли решена ваша ReCaptcha:

    var captcha_passed = false; 
    
  • Расскажите ReCaptcha Google, для вызова функции после успешного завершения:

    <div class="g-recaptcha" data-callback="on_captcha_filled" data-sitekey="6LdliBkTAAAAALmMlPRRm0NtKW3fz2kT2nxiWrVG"></div> 
    
  • Добавьте ярлык, чтобы ваши пользователи знали, что это было пропущено. Сделайте это скрытым. Javascript будет отображать его, если они будут отправлены без reCaptcha.

    <label id="lblCaptchaRequired" style="color: red" hidden>Please complete the reCaptcha</label> 
    
  • Добавить функцию яваскрипта называться по ReCaptcha:

    function on_captcha_filled() { 
        captcha_passed = true; 
        document.getElementById("lblCaptchaRequired").hidden = true; 
    } 
    
  • Добавить onsubmit обработчик в форму, чтобы убедиться, что ReCaptcha прошло, прежде чем продолжить:

    <form action = "somefile" method = "post" onsubmit = "check_captcha(event)"> 
    
  • Добавить обработчик onsubmit javascript:

    function check_captcha(e) { 
        if (captcha_passed) 
         return true; 
        document.getElementById("lblCaptchaRequired").hidden = false; 
        e.preventDefault(); 
    } 
    
  • Обновлено форма:

    <form action = "somefile" method = "post" onsubmit = "check_captcha(event)"> 
    
        <input = "text" name = "textbox1" required> 
    
        <div class="g-recaptcha" data-callback="on_captcha_filled" data-sitekey="6LdliBkTAAAAALmMlPRRm0NtKW3fz2kT2nxiWrVG"></div> 
        <label id="lblCaptchaRequired" style="color: red" hidden>Please complete the reCaptcha</label> 
    
        <button type="submit" name="login">Sign In</button> 
    
    </form> 
    
  • Javascript файл

    var captcha_passed = false; 
    
    /* 
    * Form onsubmit handler. 
    * Display captcha required label and prevent submit until captcha_passed is true 
    */ 
    function check_captcha(e) { 
        if (captcha_passed) 
         return true; 
        document.getElementById("lblCaptchaRequired").hidden = false; 
        e.preventDefault(); 
    } 
    
    /* 
    * Google reCaptcha data-callback handler. 
    * Sets captcha_passed to true to allow form submission and hides captcha required label. 
    */ 
    function on_captcha_filled() { 
        captcha_passed = true; 
        document.getElementById("lblCaptchaRequired").hidden = true; 
    } 
    

Теперь, когда ваш пользователь достигнет этой страницы, требуемая метка изначально скрыты и ваш captcha_passed инициализируется false. Когда пользователь отправляет форму, вызывается обработчик onsubmit check_captcha, который проверяет флаг captcha_passed и либо разрешает действие отправки продолжать, либо останавливает его, и отображает его.
Когда пользователь завершает reCaptcha, вызывается функция on_captcha_filled, которая устанавливает флаг captcha_passed в true и скрывает ярлык.