@@ -10,16 +10,14 @@ export default class extends Controller {
10
10
11
11
connect ( ) {
12
12
this . autoTargets . forEach ( ( element ) => {
13
- const event =
14
- element . dataset . autosubmitTriggerEvent || this . triggerEventValue ;
13
+ const event = this . #getTriggerEvent( element ) ;
15
14
element . addEventListener ( event , this . handleInput ) ;
16
15
} ) ;
17
16
}
18
17
19
18
disconnect ( ) {
20
19
this . autoTargets . forEach ( ( element ) => {
21
- const event =
22
- element . dataset . autosubmitTriggerEvent || this . triggerEventValue ;
20
+ const event = this . #getTriggerEvent( element ) ;
23
21
element . removeEventListener ( event , this . handleInput ) ;
24
22
} ) ;
25
23
}
@@ -33,6 +31,50 @@ export default class extends Controller {
33
31
} , this . #debounceTimeout( target ) ) ;
34
32
} ;
35
33
34
+ #getTriggerEvent( element ) {
35
+ // Check if element has explicit trigger event set
36
+ if ( element . dataset . autosubmitTriggerEvent ) {
37
+ return element . dataset . autosubmitTriggerEvent ;
38
+ }
39
+
40
+ // Check if form has explicit trigger event set
41
+ if ( this . triggerEventValue !== "input" ) {
42
+ return this . triggerEventValue ;
43
+ }
44
+
45
+ // Otherwise, choose trigger event based on element type
46
+ const type = element . type || element . tagName ;
47
+
48
+ switch ( type . toLowerCase ( ) ) {
49
+ case "text" :
50
+ case "email" :
51
+ case "password" :
52
+ case "search" :
53
+ case "tel" :
54
+ case "url" :
55
+ case "textarea" :
56
+ return "blur" ;
57
+ case "number" :
58
+ case "date" :
59
+ case "datetime-local" :
60
+ case "month" :
61
+ case "time" :
62
+ case "week" :
63
+ case "color" :
64
+ return "change" ;
65
+ case "checkbox" :
66
+ case "radio" :
67
+ case "select" :
68
+ case "select-one" :
69
+ case "select-multiple" :
70
+ return "change" ;
71
+ case "range" :
72
+ return "input" ;
73
+ default :
74
+ return "blur" ;
75
+ }
76
+ }
77
+
36
78
#debounceTimeout( element ) {
37
79
if ( element . dataset . autosubmitDebounceTimeout ) {
38
80
return Number . parseInt ( element . dataset . autosubmitDebounceTimeout ) ;
0 commit comments