Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как получить данные из формы

Короткий ответ

new FormData(form) собирает все поля с атрибутом name. Object.fromEntries() превращает их в объект:

<form id="signup">
  <input name="name" value="Anna">
  <input name="email" value="anna@example.com">
  <button>Sign up</button>
</form>
<pre id="out"></pre>
<script>
  const form = document.getElementById('signup');
  form.addEventListener('submit', (event) => {
    event.preventDefault();
    const data = Object.fromEntries(new FormData(form));
    document.getElementById('out').textContent = JSON.stringify(data);
  });
</script>

Флажки с одним именем

Object.fromEntries() оставляет только последнее значение повторяющегося имени. Для групп флажков используйте getAll():

const data = new FormData(form);
const toppings = data.getAll('topping');
const subscribe = data.has('subscribe');

Одно поле

Отдельное поле можно прочитать через коллекцию elements формы по его имени:

const email = form.elements.email.value.trim();

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

Поле без атрибута name в FormData не попадает. А неотмеченный флажок не отправляется вовсе, поэтому проверяйте его через has(), а не по значению.

<!-- not in FormData: there is no name -->
<input id="phone" value="555-1234">

Функции из этого ответа

  • Object.fromEntries — Создаёт объект из списка пар ключ — значение.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.