@@ -65,6 +65,9 @@ export type RemoteFormHandler = (form: HTMLFormElement, kicker: Kicker, req: Sim
6565// element.
6666type Installable = string | HTMLFormElement
6767
68+ // Any element that submits a <form>
69+ type HTMLSubmitElement = HTMLButtonElement | HTMLInputElement
70+
6871let formHandlers : Map < Installable , RemoteFormHandler [ ] >
6972type Handler = ( form : HTMLFormElement ) => void
7073
@@ -133,7 +136,16 @@ function handleSubmit(event: Event) {
133136 return
134137 }
135138
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+
137149 const [ kickerPromise , ultimateResolve , ultimateReject ] = makeDeferred < SimpleResponse > ( )
138150
139151 event . preventDefault ( )
@@ -202,9 +214,9 @@ async function processHandlers(
202214 return kickerWasCalled
203215}
204216
205- function buildRequest ( form : HTMLFormElement ) : SimpleRequest {
217+ function buildRequest ( form : HTMLFormElement , submitter : HTMLSubmitElement | null ) : SimpleRequest {
206218 const req : SimpleRequest = {
207- method : form . method || 'GET' ,
219+ method : submitter ?. formMethod || form . method || 'GET' ,
208220 url : form . action ,
209221 headers : new Headers ( { 'X-Requested-With' : 'XMLHttpRequest' } ) ,
210222 body : null
0 commit comments