1/** 2 * GravityForm Script file. 3 * 4 * @param {jQuery} $ 5 * @param {Window} window 6 * @param {Document} document 7 * @package 8 */ 9 10(function ($, window, document) { 11 'use strict'; 12 13 $(document).ready(function () { 14 const formCheck = [ 15 { 16 formId: 2, 17 requiredFields: [22], 18 }, 19 ]; 20 21 // Check if form has required fields then disable submit button. 22 const gFormDisableSubmitButton = () => { 23 formCheck.forEach((form) => { 24 const { formId, requiredFields } = form; 25 26 // Check if form exists. 27 const $gform = $(`#gform_${formId}`); 28 if (!$gform.length) { 29 return; 30 } 31 32 // Check if form has required field IDs 33 let allFieldsExist = true; 34 requiredFields.forEach((fieldId) => { 35 const $field = $gform.find(`#input_${formId}_${fieldId}`); 36 if (!$field.length) { 37 allFieldsExist = false; 38 } 39 }); 40 41 // Only proceed if all fields exist 42 if (!allFieldsExist) { 43 return; 44 } 45 46 gFormTriggerChangeValue(formId, requiredFields); 47 48 // If all above conditions are met then disable submit button on first load. 49 $gform 50 .find(`#gform_submit_button_${formId}`) 51 .prop('disabled', true); 52 }); 53 }; 54 55 // Check if all required fields are valid. 56 const gFormCheckRequiredFields = (formId, requiredFields) => { 57 let isRequiredFieldsValid = true; 58 59 requiredFields.forEach((fieldId) => { 60 const $field = $(`#input_${formId}_${fieldId}`); 61 if (!$field.length) { 62 isRequiredFieldsValid = false; 63 return; 64 } 65 66 if ($field.val() === '') { 67 isRequiredFieldsValid = false; 68 return; 69 } 70 71 // Enhanced password validation 72 if ($field.attr('type') === 'password') { 73 const $strengthIndicator = $( 74 `#input_${formId}_${fieldId}_strength_indicator` 75 ); 76 const $confirmPassword = $(`#input_${formId}_${fieldId}_2`); 77 const passwordValue = $field.val(); 78 const confirmValue = $confirmPassword.val(); 79 80 if ( 81 (!$strengthIndicator.hasClass('strong') && 82 !$strengthIndicator.hasClass('good')) || 83 !confirmValue || 84 confirmValue !== passwordValue 85 ) { 86 isRequiredFieldsValid = false; 87 } 88 } 89 }); 90 91 return isRequiredFieldsValid; 92 }; 93 94 // Trigger any change from required fields. 95 const gFormTriggerChangeValue = (formId, requiredFields) => { 96 requiredFields.forEach((fieldId) => { 97 const $field = $(`#input_${formId}_${fieldId}`); 98 99 // Handle password fields specially 100 if ($field.attr('type') === 'password') { 101 // Monitor main password field 102 $field.on('keyup change', function () { 103 validateAndUpdateButton(formId, requiredFields); 104 }); 105 106 // Monitor confirmation password field 107 $(`#input_${formId}_${fieldId}_2`).on( 108 'keyup change', 109 function () { 110 validateAndUpdateButton(formId, requiredFields); 111 } 112 ); 113 } else { 114 // Handle non-password fields 115 $field.on('change', function () { 116 validateAndUpdateButton(formId, requiredFields); 117 }); 118 } 119 }); 120 }; 121 122 // New helper function to validate and update button state 123 const validateAndUpdateButton = (formId, requiredFields) => { 124 const isValid = gFormCheckRequiredFields(formId, requiredFields); 125 $(`#gform_submit_button_${formId}`).prop('disabled', !isValid); 126 }; 127 128 gFormDisableSubmitButton(); 129 }); 130})(jQuery, window, document);
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.