Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTML5 form validation before reCAPTCHA's

I integrated the new hidden reCAPTCHA (v2) framework which by default verifies the user with the click event of the submit button. But this event is triggered before the built-in HTML5 form validation. I am looking for a way to make it in the expected order: form validation first, reCAPTCHA after.

like image 536
Julio Guerra Avatar asked Jan 15 '17 20:01

Julio Guerra


People also ask

How do I bypass HTML5 validation?

To ignore HTML validation, you can remove the attribute on button click using JavaScript. Uer removeAttribute() to remove an attribute from each of the matched elements.

Does HTML5 have form validation?

Using HTML5, we can create a form with built in validation (i.e. no javascript required). Earlier, we were using JAVASCRIPT to control form validation.

How do I validate my reCAPTCHA?

Click the checkbox to get a verification challenge. The checkbox has been clicked and a challenge is loading. You are instantly verified if the status changes to “You are verified”. Otherwise, you are required to complete a verification challenge.


1 Answers

You have to do it programmatically thanks to a new v2 grecaptcha method: grecaptcha.execute() so that recaptcha doesn't replace the button's default click event which was preventing the default HTML5 form validation.

The event path is:

  1. Submit button click event: browser built-in form validation
  2. Form submit event: call grecaptcha.execute()
  3. reCAPTCHA callback: submit the form

$('#form-contact').submit(function (event) {      event.preventDefault();      grecaptcha.reset();      grecaptcha.execute();    });    function formSubmit(response) {    // submit the form which now includes a g-recaptcha-response input  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  <script src="https://www.google.com/recaptcha/api.js"></script>  <form action="?">    <div class="g-recaptcha"          data-sitekey="your-key"         data-size="invisible"         data-callback="formSubmit">    </div>    <button type="submit">Submit</button>  </form>
like image 78
Julio Guerra Avatar answered Sep 28 '22 04:09

Julio Guerra