Атрибут formaction: отдельный адрес для кнопки отправки
Formaction позволяет конкретной кнопке отправить форму по адресу, отличающемуся от action формы. Это удобно для двух явно разных действий с одним набором полей.
Назначение
Formaction позволяет конкретной кнопке отправить форму по адресу, отличающемуся от action формы. Это удобно для двух явно разных действий с одним набором полей.
Как это работает
Атрибут применяется к подходящей кнопке отправки, а не к любому элементу. В примере две кнопки имеют понятные названия и значения action. Оба серверных адреса являются учебными и требуют собственной реализации.
Пример
<form action="/demo-save" method="post"><label for="fa-title">Название</label><input id="fa-title" name="title" required><button type="submit" name="action" value="save">Сохранить</button><button type="submit" name="action" value="preview" formaction="/demo-preview">Предпросмотр</button></form>
Что должно получиться
Обычная кнопка использует /demo-save, кнопка предпросмотра — /demo-preview. Различие определяется выбранным инициатором отправки, а не последней кнопкой в исходнике.
Граница применения и частая ошибка
Formaction не делает обработчики безопасными автоматически. Оба маршрута должны проверять полномочия, входные данные и необходимые защитные токены. Пользователь может изменить адрес и поля запроса, поэтому нельзя доверять маршруту только из-за HTML.
Самостоятельная проверка
На своём тестовом сервере сравните URL и тело двух отправок через Network. Проверьте отправку клавишей Enter: инициатор может отличаться от ожидаемого. Для программной отправки используйте подходящий submitter с requestSubmit.