From 6b57a3bd3a0128ed450adf9aa1383ec8f0e86afa Mon Sep 17 00:00:00 2001 From: Keith Dahlby Date: Sat, 30 Mar 2024 15:40:09 -0500 Subject: [PATCH 01/18] Enable validation for demo index --- Pages/Index.cshtml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Pages/Index.cshtml b/Pages/Index.cshtml index a8d6477..c229132 100644 --- a/Pages/Index.cshtml +++ b/Pages/Index.cshtml @@ -110,11 +110,15 @@ + @section scripts { } +
Form 4 (preventDefault())
From 8ec90285c076bd926e699474bd3dc9b38fc638ab Mon Sep 17 00:00:00 2001 From: Keith Dahlby Date: Sat, 30 Mar 2024 15:47:02 -0500 Subject: [PATCH 03/18] Guard against deleted validator --- src/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index ebc28fb..ba6793e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1044,9 +1044,11 @@ export class ValidationService { let debounceTimeoutID = 0; let cb = (e: Event, callback?: ValidatedCallback) => { - let validate = this.validators[uid]; clearTimeout(debounceTimeoutID); debounceTimeoutID = setTimeout(() => { + let validate = this.validators[uid]; + if (!validate) return; + validate() .then(callback) .catch(error => { From 43ea6cffe77cc4a12e686c177d5e8e185d921bcb Mon Sep 17 00:00:00 2001 From: Keith Dahlby Date: Sat, 30 Mar 2024 16:02:39 -0500 Subject: [PATCH 04/18] Simplify adding validate event listener --- src/index.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/index.ts b/src/index.ts index ba6793e..db78ce8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1057,14 +1057,8 @@ export class ValidationService { }, this.debounce); }; - let validateEvent = input.dataset.valEvent; - if (validateEvent) { - input.addEventListener(validateEvent, cb); - } - else { - let eventType = input instanceof HTMLSelectElement ? 'change' : 'input'; - input.addEventListener(eventType, cb); - } + const validateEvent = input.dataset.valEvent || input instanceof HTMLSelectElement ? 'change' : 'input'; + input.addEventListener(validateEvent, cb); this.inputEvents[uid] = cb; } From cecbc8befe3482501d36454222e75226d778daa8 Mon Sep 17 00:00:00 2001 From: Keith Dahlby Date: Sat, 30 Mar 2024 16:17:20 -0500 Subject: [PATCH 05/18] Remove input event listeners --- src/index.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index db78ce8..7f4bbb0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -81,6 +81,11 @@ export type ValidationProvider = (value: string, element: ValidatableElement, pa */ export type ValidatedCallback = (success: boolean) => void; +interface ValidationEventCallback { + (e?: Event, callback?: ValidatedCallback): void; + remove?: () => void; +} + /** * A callback method signature that kickstarts a new validation task for an input element, as a Boolean Promise. */ @@ -459,7 +464,7 @@ export class ValidationService { /** * A key-value map for element UID to its trigger element (input event for