diff --git a/.changeset/sharp-beers-learn.md b/.changeset/sharp-beers-learn.md new file mode 100644 index 000000000000..77545786a346 --- /dev/null +++ b/.changeset/sharp-beers-learn.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Add the submitter value with name to formData for use:enhance diff --git a/packages/kit/src/runtime/app/forms.js b/packages/kit/src/runtime/app/forms.js index f55f3c837c51..738ad9d36931 100644 --- a/packages/kit/src/runtime/app/forms.js +++ b/packages/kit/src/runtime/app/forms.js @@ -51,6 +51,12 @@ export function enhance(form, submit = () => {}) { ); const data = new FormData(form); + + const submitter_name = event.submitter?.getAttribute('name'); + if (submitter_name) { + data.append(submitter_name, event.submitter?.getAttribute('value') ?? ''); + } + const controller = new AbortController(); let cancelled = false; diff --git a/packages/kit/test/apps/basics/src/routes/actions/enhance/+page.server.js b/packages/kit/test/apps/basics/src/routes/actions/enhance/+page.server.js index 7a97721c284e..b77d167aefca 100644 --- a/packages/kit/test/apps/basics/src/routes/actions/enhance/+page.server.js +++ b/packages/kit/test/apps/basics/src/routes/actions/enhance/+page.server.js @@ -21,5 +21,11 @@ export const actions = { }, slow: async () => { await new Promise((resolve) => setTimeout(resolve, 500)); + }, + submitter: async ({ request }) => { + const fields = await request.formData(); + return { + result: 'submitter: ' + fields.get('submitter') + }; } }; diff --git a/packages/kit/test/apps/basics/src/routes/actions/enhance/+page.svelte b/packages/kit/test/apps/basics/src/routes/actions/enhance/+page.svelte index 28ddf39f9972..032b7ca9c13b 100644 --- a/packages/kit/test/apps/basics/src/routes/actions/enhance/+page.svelte +++ b/packages/kit/test/apps/basics/src/routes/actions/enhance/+page.svelte @@ -17,6 +17,7 @@ + {count} diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index 5d05744984f5..a66e6e1473b3 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -1865,6 +1865,21 @@ test.describe('Actions', () => { ); }); + test('use:enhance button with name', async ({ page, app }) => { + await page.goto('/actions/enhance'); + + expect(await page.textContent('pre.formdata1')).toBe(JSON.stringify(null)); + + await Promise.all([ + page.waitForRequest((request) => request.url().includes('/actions/enhance')), + page.click('button.form1-submitter') + ]); + + await expect(page.locator('pre.formdata1')).toHaveText( + JSON.stringify({ result: 'submitter: foo' }) + ); + }); + test('redirect', async ({ page }) => { await page.goto('/actions/redirect');