@@ -113,7 +113,7 @@ class Pattern extends BasePattern {
113113 }
114114
115115 // In any case, clear the custom validity first.
116- this . set_error ( { input : input , msg : "" } ) ;
116+ this . set_error ( { input : input , msg : "" , skip_event : true } ) ;
117117 const validity_state = input . validity ;
118118
119119 if ( event ?. submitter ?. hasAttribute ( "formnovalidate" ) ) {
@@ -315,7 +315,11 @@ class Pattern extends BasePattern {
315315 input_options . message . datetime
316316 ) {
317317 this . set_error ( { input : input , msg : input_options . message . datetime } ) ;
318+ } else {
319+ // Still an error, but here we need to call `emit_update` separately
320+ this . emit_update ( "invalid" ) ;
318321 }
322+
319323 }
320324
321325 if ( event ?. type === "submit" ) {
@@ -327,7 +331,7 @@ class Pattern extends BasePattern {
327331 this . set_error_message ( input ) ;
328332 }
329333
330- set_error ( { input, msg, attribute = null , min = null , max = null } ) {
334+ set_error ( { input, msg, attribute = null , min = null , max = null , skip_event = false } ) {
331335 // Replace some variables, as like validate.js
332336 if ( attribute ) {
333337 msg = msg . replace ( / % { attribute} / g, attribute ) ;
@@ -346,9 +350,12 @@ class Pattern extends BasePattern {
346350 // (e.g. styled date input).
347351 input [ KEY_ERROR_MSG ] = msg ;
348352
353+ if ( ! skip_event ) {
354+ this . emit_update ( "invalid" ) ;
355+ }
349356 }
350357
351- remove_error ( input , all_of_group = false ) {
358+ remove_error ( input , all_of_group = false , skip_event = false ) {
352359 // Remove error message and related referencesfrom input.
353360
354361 let inputs = [ input ] ;
@@ -371,6 +378,10 @@ class Pattern extends BasePattern {
371378 }
372379 }
373380 }
381+
382+ if ( ! skip_event ) {
383+ this . emit_update ( "valid" ) ;
384+ }
374385 }
375386
376387 set_error_message ( input ) {
0 commit comments