Вебсправочник
Ваш первый сайт

Урок: сохранить несколько значений одного имени поля

Группа выбранных чекбоксов может отправлять несколько значений с одинаковым именем. Простое превращение FormData в объект теряет повторы, поэтому нужно заранее выбрать подходящее представление данных.

Назначение

Группа выбранных чекбоксов может отправлять несколько значений с одинаковым именем. Простое превращение FormData в объект теряет повторы, поэтому нужно заранее выбрать подходящее представление данных.

Как это работает

Создайте локальную форму id topics с двумя отмеченными чекбоксами name="topic" и значениями html и css. Пример подключается после формы и сравнивает полный список с результатом Object.fromEntries.

Пример

const form = document.querySelector("#topics");
const data = new FormData(form);
console.log("Все темы:", data.getAll("topic"));
console.log("Обычный объект:", Object.fromEntries(data));
const payload = {topics:data.getAll("topic")};
console.log(JSON.stringify(payload));

Что должно получиться

GetAll сохраняет оба значения в порядке формы. Обычный объект содержит только одно значение одинакового ключа, а явное поле topics позволяет сериализовать массив в JSON без потери выбора.

Граница применения и частая ошибка

Неотмеченные чекбоксы и disabled-поля не включаются как обычные успешные элементы формы. FormData также может содержать файлы, для которых простая JSON-сериализация не подходит. Сервер должен проверять допустимые значения и их количество.

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

Снимите обе отметки и повторите чтение: ожидается пустой массив. Затем оставьте одну и сравните результат. Добавьте постороннее значение в учебной копии и объясните, почему сервер не должен доверять списку только из-за формы.

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