Вебсправочник
Справочник JavaScript

FormData: чтение значений формы

Как получить отправляемые поля и учитывать повторяющиеся имена и флажки.

Основная идея

FormData собирает данные формы по правилам отправляемых контролов. У поля должен быть name. Отключённые поля и неотмеченные checkbox обычно не включаются. Поэтому наличие элемента на экране не гарантирует наличие ключа в данных.

Get возвращает одно значение, getAll — все значения с одинаковым именем. Значением может быть строка или File. Преобразование через Object.fromEntries удобно, но теряет повторяющиеся ключи; не применяйте его бездумно к множественному выбору.

Пример JavaScript

const form = document.querySelector("form");
form?.addEventListener("submit", event => {
  event.preventDefault();
  const data = new FormData(form);
  const topic = data.get("topic");
  console.log(topic);
});

Пример останавливает обычную отправку и показывает поле topic в консоли. Он не отправляет сообщение и не сохраняет данные.

Частая ошибка

При отправке FormData через fetch не задавайте вручную Content-Type multipart/form-data: браузер должен добавить правильную boundary.

Самостоятельная проверка

Добавьте в учебную форму два checkbox с одним name. Сравните get и getAll и проверьте результат, когда ни один не выбран.

Код здесь показан для изучения. Встроенная песочница сайта выполняет только HTML/CSS. JavaScript проверяйте в собственном учебном файле или консоли своего тестового проекта; не вставляйте непонятный код на страницах с личными данными.

Следующие темы: fetch, обработчики событий.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.