Skip to main content

custom_form_submission_frame

📝 Custom Form Submission via Turbo Frames

Override Turbo’s default form submission to add complex payloads or transform data on-the-fly. Use turbo:before-fetch-request on the form’s frame to intercept and modify FormData before it’s sent.

// app/javascript/controllers/form_transform_controller.js
import { Controller } from '@hotwired/stimulus'

export default class extends Controller {
connect() {
this.element.addEventListener('turbo:before-fetch-request', event => {
const formData = new FormData(event.target)
// Add or transform fields
formData.set('metadata[timestamp]', Date.now())
// Replace body
event.detail.fetchOptions.body = formData
})
}
}