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');