@@ -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,12 @@ 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 without customized messages.
320+ // Call `emit_update` separately
321+ this . emit_update ( "invalid" ) ;
318322 }
323+
319324 }
320325
321326 if ( event ?. type === "submit" ) {
@@ -327,7 +332,7 @@ class Pattern extends BasePattern {
327332 this . set_error_message ( input ) ;
328333 }
329334
330- set_error ( { input, msg, attribute = null , min = null , max = null } ) {
335+ set_error ( { input, msg, attribute = null , min = null , max = null , skip_event = false } ) {
331336 // Replace some variables, as like validate.js
332337 if ( attribute ) {
333338 msg = msg . replace ( / % { attribute} / g, attribute ) ;
@@ -346,9 +351,12 @@ class Pattern extends BasePattern {
346351 // (e.g. styled date input).
347352 input [ KEY_ERROR_MSG ] = msg ;
348353
354+ if ( ! skip_event ) {
355+ this . emit_update ( "invalid" ) ;
356+ }
349357 }
350358
351- remove_error ( input , all_of_group = false ) {
359+ remove_error ( input , all_of_group = false , skip_event = false ) {
352360 // Remove error message and related referencesfrom input.
353361
354362 let inputs = [ input ] ;
@@ -371,6 +379,10 @@ class Pattern extends BasePattern {
371379 }
372380 }
373381 }
382+
383+ if ( ! skip_event ) {
384+ this . emit_update ( "valid" ) ;
385+ }
374386 }
375387
376388 set_error_message ( input ) {
0 commit comments