@@ -65,6 +65,9 @@ export type RemoteFormHandler = (form: HTMLFormElement, kicker: Kicker, req: Sim
65
65
// element.
66
66
type Installable = string | HTMLFormElement
67
67
68
+ // Any element that submits a <form>
69
+ type HTMLSubmitElement = HTMLButtonElement | HTMLInputElement
70
+
68
71
let formHandlers : Map < Installable , RemoteFormHandler [ ] >
69
72
type Handler = ( form : HTMLFormElement ) => void
70
73
@@ -133,7 +136,16 @@ function handleSubmit(event: Event) {
133
136
return
134
137
}
135
138
136
- const req = buildRequest ( form )
139
+ let submitter
140
+
141
+ if ( event instanceof SubmitEvent ) {
142
+ submitter = event . submitter as HTMLSubmitElement
143
+ } else {
144
+ submitter = null
145
+ }
146
+
147
+ const req = buildRequest ( form , submitter )
148
+
137
149
const [ kickerPromise , ultimateResolve , ultimateReject ] = makeDeferred < SimpleResponse > ( )
138
150
139
151
event . preventDefault ( )
@@ -202,9 +214,9 @@ async function processHandlers(
202
214
return kickerWasCalled
203
215
}
204
216
205
- function buildRequest ( form : HTMLFormElement ) : SimpleRequest {
217
+ function buildRequest ( form : HTMLFormElement , submitter : HTMLSubmitElement | null ) : SimpleRequest {
206
218
const req : SimpleRequest = {
207
- method : form . method || 'GET' ,
219
+ method : submitter ?. formMethod || form . method || 'GET' ,
208
220
url : form . action ,
209
221
headers : new Headers ( { 'X-Requested-With' : 'XMLHttpRequest' } ) ,
210
222
body : null
0 commit comments