@@ -174,9 +174,9 @@ class="w-8 h-8 bg-white rounded-lg border-2 border-blue-800 text-primary focus:r
174174 </span >
175175 </label >
176176
177- <!-- CAPTCHA -->
178- <div class =" flex justify-center mt-6" >
177+ <div class =" flex justify-center mt-6" >
179178 <div class =" cf-turnstile" data-sitekey =" {{ env (' TURNSTILE_SITEKEY' ) } }" ></div >
179+ <input type =" hidden" id =" cf-turnstile-response" name =" cf-turnstile-response" />
180180 </div >
181181
182182 <!-- Submit -->
@@ -190,48 +190,51 @@ class="flex gap-2 items-center px-8 py-4 text-base font-semibold leading-7 text-
190190 </div >
191191 </div >
192192
193- <script src =" https://challenges.cloudflare.com/turnstile/v0/api.js?onload=turnstileCallback" async defer ></script >
194- <script >
195- document .addEventListener (' DOMContentLoaded' , function () {
196- const form = document .getElementById (' contactForm' );
197- const submitButton = document .getElementById (' submitButton' );
198- const requiredFields = form .querySelectorAll (' [required]' );
199-
200- function validateForm () {
201- let allFilled = true ;
202- requiredFields .forEach (field => {
203- if ((field .type === ' checkbox' && ! field .checked ) ||
204- (field .tagName === ' SELECT' && ! field .value ) ||
205- ((field .tagName === ' INPUT' || field .tagName === ' TEXTAREA' ) && ! field .value .trim ())) {
206- allFilled = false ;
207- }
208- });
209-
210- submitButton .disabled = ! allFilled;
211- submitButton .classList .toggle (' bg-primary' , allFilled);
212- submitButton .classList .toggle (' hover:bg-hover-orange' , allFilled);
213- submitButton .classList .toggle (' cursor-pointer' , allFilled);
214- submitButton .classList .toggle (' cursor-not-allowed' , ! allFilled);
215- submitButton .classList .toggle (' bg-gray-300' , ! allFilled);
216- submitButton .classList .toggle (' text-gray-500' , ! allFilled);
217- submitButton .classList .toggle (' text-black' , allFilled);
193+ <script src =" https://challenges.cloudflare.com/turnstile/v0/api.js" async defer ></script >
194+
195+ <script >
196+ document .addEventListener (' DOMContentLoaded' , function () {
197+ const form = document .getElementById (' contactForm' );
198+ const submitButton = document .getElementById (' submitButton' );
199+ const requiredFields = form .querySelectorAll (' [required]' );
200+ const captchaInput = document .getElementById (' cf-turnstile-response' );
201+
202+ function validateForm () {
203+ let allValid = true ;
204+ requiredFields .forEach (field => {
205+ if ((field .type === ' checkbox' && ! field .checked ) ||
206+ (field .tagName === ' SELECT' && ! field .value ) ||
207+ ((field .tagName === ' INPUT' || field .tagName === ' TEXTAREA' ) && ! field .value .trim ())) {
208+ allValid = false ;
218209 }
219-
220- form .addEventListener (' input' , validateForm);
221- form .addEventListener (' change' , validateForm);
222- validateForm ();
223210 });
224- window .onload = function () {
211+
212+ allValid = allValid && captchaInput .value ;
213+
214+ submitButton .disabled = ! allValid;
215+ submitButton .classList .toggle (' bg-primary' , allValid);
216+ submitButton .classList .toggle (' hover:bg-hover-orange' , allValid);
217+ submitButton .classList .toggle (' cursor-pointer' , allValid);
218+ submitButton .classList .toggle (' cursor-not-allowed' , ! allValid);
219+ submitButton .classList .toggle (' bg-gray-300' , ! allValid);
220+ submitButton .classList .toggle (' text-gray-500' , ! allValid);
221+ submitButton .classList .toggle (' text-black' , allValid);
222+ }
223+
224+ form .addEventListener (' input' , validateForm);
225+ form .addEventListener (' change' , validateForm);
226+
225227 window .turnstileCallback = function () {
226228 turnstile .render (' .cf-turnstile' , {
227229 sitekey: ' {{ env (' TURNSTILE_SITEKEY' ) } }' ,
228- callback : function (token ) {
229- document .getElementById (' cf-turnstile-response' ).value = token;
230+ callback : function (token ) {
231+ captchaInput .value = token;
232+ validateForm ();
230233 }
231234 });
232235 };
233- };
234- </script >
236+ }) ;
237+ </script >
235238 </div >
236239 </section >
237240 </section >
0 commit comments