From 6b91a2614df37628aa41bdfb6e84aa9f5398f564 Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Wed, 20 Nov 2024 09:53:37 -0400 Subject: [PATCH 1/3] Maybe delay error field focus --- js/formidable.js | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/js/formidable.js b/js/formidable.js index e60856dd76..073dad31d9 100644 --- a/js/formidable.js +++ b/js/formidable.js @@ -1335,7 +1335,7 @@ function frmFrontFormJS() { do { element = element.previousSibling; if ( -1 !== [ 'input', 'select', 'textarea' ].indexOf( element.nodeName.toLowerCase() ) ) { - element.focus(); + focusInput( element ); break; } @@ -1361,6 +1361,32 @@ function frmFrontFormJS() { } while ( element.previousSibling ); } + /** + * Focus a visible input, or possibly delay the focus event until the form has faded in. + * + * @since x.x + * + * @param {HTMLElement} element + * @return {void} + */ + function focusInput( element ) { + const visible = element.offsetParent !== null; + if ( visible ) { + element.focus(); + return; + } + + // Possibly delay focus. + const form = element.closest( 'form' ); + if ( ! form ) { + const focusHandler = () => { + element.focus(); + form.removeEventListener( 'frmProAfterFormFadeIn', focusHandler ); + }; + form.addEventListener( 'frmProAfterFormFadeIn', focusHandler ); + } + } + /** * Does the same as jQuery( document ).on( 'event', 'selector', handler ). * From b9f986ccac709297114680f4f4f2008fcd5ef97d Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Wed, 20 Nov 2024 10:02:34 -0400 Subject: [PATCH 2/3] Only trigger an event, leave most code to Pro --- js/formidable.js | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/js/formidable.js b/js/formidable.js index 073dad31d9..1f15600a22 100644 --- a/js/formidable.js +++ b/js/formidable.js @@ -1366,25 +1366,17 @@ function frmFrontFormJS() { * * @since x.x * - * @param {HTMLElement} element + * @param {HTMLElement} input * @return {void} */ - function focusInput( element ) { - const visible = element.offsetParent !== null; + function focusInput( input ) { + const visible = input.offsetParent !== null; if ( visible ) { - element.focus(); + input.focus(); return; } - // Possibly delay focus. - const form = element.closest( 'form' ); - if ( ! form ) { - const focusHandler = () => { - element.focus(); - form.removeEventListener( 'frmProAfterFormFadeIn', focusHandler ); - }; - form.addEventListener( 'frmProAfterFormFadeIn', focusHandler ); - } + triggerCustomEvent( document, 'frmMaybeDelayFocus', { input }); } /** From ac6c61d13d548195ad651f00530df5140428c7f6 Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Wed, 20 Nov 2024 10:16:59 -0400 Subject: [PATCH 3/3] Reduce code --- js/formidable.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/js/formidable.js b/js/formidable.js index 1f15600a22..fffcda4ef5 100644 --- a/js/formidable.js +++ b/js/formidable.js @@ -1370,13 +1370,11 @@ function frmFrontFormJS() { * @return {void} */ function focusInput( input ) { - const visible = input.offsetParent !== null; - if ( visible ) { + if ( input.offsetParent !== null ) { input.focus(); - return; + } else { + triggerCustomEvent( document, 'frmMaybeDelayFocus', { input }); } - - triggerCustomEvent( document, 'frmMaybeDelayFocus', { input }); } /**