> Как сделать, чтобы форма сабмитилась один раз и возвращала данные через функцию (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Milk and Cartoons

Стек: JavaScript

> Пример ответа

Чтобы форма сабмитилась только один раз и возвращала данные через функцию, можно использовать обработчик события submit с блокировкой повторного нажатия. Вот пример на чистом JavaScript:

JAVASCRIPT
const form = document.getElementById('myForm');
function handleSubmit(data) {
console.log('Данные формы:', data);
// Здесь можно отправить данные на сервер или обработать
}
form.addEventListener('submit', function(event) {
event.preventDefault(); // Отменяем стандартную отправку
// Собираем данные формы
const formData = new FormData(form);
const data = Object.fromEntries(formData.entries());
// Вызываем функцию с данными
handleSubmit(data);
// Отключаем возможность повторного сабмита
form.querySelector('button[type="submit"]').disabled = true;
// Или удаляем обработчик:
// form.removeEventListener('submit', arguments.callee);
});

Ключевые моменты:

  • event.preventDefault() предотвращает перезагрузку страницы.
  • FormData собирает все поля формы.
  • После первого сабмита кнопка блокируется (disabled = true), что гарантирует однократную отправку.
  • Данные передаются в функцию handleSubmit для дальнейшей обработки.

Если нужно вернуть данные через callback, можно модифицировать подход:

JAVASCRIPT
function submitOnce(form, callback) {
let submitted = false;
form.addEventListener('submit', function(event) {
event.preventDefault();
if (submitted) return;
submitted = true;
const data = Object.fromEntries(new FormData(form));
callback(data);
});
}
submitOnce(document.getElementById('myForm'), (data) => {
console.log('Получены данные:', data);
});

Этот паттерн гарантирует, что форма отправится ровно один раз, а данные будут переданы в указанную функцию.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью