From c03d21d8c7981ae6ddfd77c3e4504a6d397c4647 Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Thu, 14 Nov 2024 13:04:06 -0400 Subject: [PATCH] Stop using jQuery for required field validation --- js/formidable.js | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/js/formidable.js b/js/formidable.js index 3d2da97507..8fe585d67e 100644 --- a/js/formidable.js +++ b/js/formidable.js @@ -163,23 +163,32 @@ function frmFrontFormJS() { } function validateForm( object ) { - let errors, r, rl, n, nl, fields, field, requiredFields; + let errors, n, nl, fields, field; errors = []; - // Make sure required text field is filled in - requiredFields = jQuery( object ).find( - '.frm_required_field:visible input, .frm_required_field:visible select, .frm_required_field:visible textarea' - ).filter( ':not(.frm_optional)' ); - if ( requiredFields.length ) { - for ( r = 0, rl = requiredFields.length; r < rl; r++ ) { - if ( hasClass( requiredFields[r], 'ed_button' ) ) { - // skip rich text field buttons. - continue; + const vanillaJsObject = 'function' === typeof object.get ? object.get( 0 ) : object; + + // Required field validation. + vanillaJsObject?.querySelectorAll( '.frm_required_field' ).forEach( + requiredField => { + const isVisible = requiredField.offsetParent !== null; + if ( ! isVisible ) { + return; } - errors = checkRequiredField( requiredFields[r], errors ); + + requiredField.querySelectorAll( 'input, select, textarea' ).forEach( + requiredInput => { + if ( hasClass( requiredInput, 'frm_optional' ) || hasClass( requiredInput, 'ed_button' ) ) { + // skip rich text field buttons. + return; + } + + errors = checkRequiredField( requiredInput, errors ); + } + ); } - } + ); fields = jQuery( object ).find( 'input,select,textarea' ); if ( fields.length ) {