1 jQuery(document).ready(function($) { 2 $(document).on('click', ".submit_contact_form", function(e) { 3 e.preventDefault(); 4 5 var $parent = $(this).parent(); 6 7 // collect input field values 8 var userName = $parent.find("input[name='name']").val(); 9 var userEmail = $parent.find("input[name='email']").val(); 10 var userMessage = $parent.find("textarea[name='message']").val(); 11 var isRecaptcha = $parent.find('#contact_form_recaptcha').length; 12 13 console.log('parent', $parent, isRecaptcha); 14 15 // simple validation at client's end 16 // we simply change border color to red if empty field using .css() 17 var proceed = true; 18 19 if($parent.find(".gdpr_label").length){ 20 if(!$parent.find("input[name='gdpr']").is(":checked")){ 21 $parent.find(".gdpr_label").css("border", "1px solid red"); 22 proceed = false; 23 } else { 24 $parent.find(".gdpr_label").removeAttr("style"); 25 } 26 } 27 28 if(userName==""){ 29 $parent.find("input[name='name']").css("border", "1px solid red"); 30 proceed = false; 31 } else { 32 $parent.find("input[name='name']").removeAttr("style"); 33 } 34 35 if(userEmail==""){ 36 $parent.find("input[name='email']").css("border", "1px solid red"); 37 proceed = false; 38 } else { 39 $parent.find("input[name='email']").removeAttr("style"); 40 } 41 42 if(userMessage=="") { 43 $parent.find("textarea[name='message']").css("border", "1px solid red"); 44 proceed = false; 45 } else { 46 $parent.find("textarea[name='message']").removeAttr("style"); 47 } 48 49 if(typeof listing_ajax.contact_gdpr_form !== 'undefined' && $parent.find('input[name="gdpr"]').length){ 50 var $gdprCheckbox = $parent.find('input[name="gdpr"]'); 51 52 if(!$gdprCheckbox.is(":checked")){ 53 proceed = false; 54 $gdprCheckbox.closest('.gdpr-control').css('border', '1px solid #F00'); 55 } else { 56 $gdprCheckbox.closest('.gdpr-control').attr('style', ''); 57 } 58 } 59 60 // everything looks good! proceed... 61 if(proceed) { 62 // data to be sent to server 63 var post_data = {'userName':userName, 'userEmail':userEmail, 'userMessage':userMessage, 'action':'send_contact_form'}; 64 65 if(isRecaptcha){ 66 var $recaptchaResponseField = $("#g-recaptcha-response"); 67 68 console.log('challenge', $recaptchaResponseField); 69 70 post_data.challenge = $recaptchaResponseField.val(); 71 } 72 73 // ajax post data to server 74 $.post(ajax_variables.ajaxurl, post_data, function(data){ 75 76 // load success massage in #result div element, with slide effect. 77 if(data.success == "yes"){ 78 $parent.find(".contact_result").hide().html('<div class="success">'+data.message+'</div>').slideDown(); 79 80 // reset values in all input fields 81 $parent.find('input[type="text"]').val(''); 82 $parent.find('input[type="email"]').val(''); 83 $parent.find('textarea').val(''); 84 } else { 85 $parent.find(".contact_result").hide().html('<div class="error">'+data.message+'</div>').slideDown(); 86 } 87 88 }).fail(function(err) { 89 $parent.find(".contact_result").hide().html('<div class="error">'+err.statusText+'</div>').slideDown(); 90 }); 91 } 92 93 setTimeout(function(){ 94 $parent.find("input, textarea").css('border-color',''); 95 $parent.find(".contact_result").slideUp(); 96 }, 3000); 97 }); 98 99});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.