> Как сделать, чтобы форма сабмитилась один раз и возвращала данные через функцию (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Milk and Cartoons
Стек: JavaScript
> Пример ответа
Чтобы форма сабмитилась только один раз и возвращала данные через функцию, можно использовать обработчик события submit с блокировкой повторного нажатия. Вот пример на чистом JavaScript:
JAVASCRIPTconst 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, можно модифицировать подход:
JAVASCRIPTfunction 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);});
Этот паттерн гарантирует, что форма отправится ровно один раз, а данные будут переданы в указанную функцию.
> Похожие задачи по frontend
Что будет, если убрать await из функции delay?
Что такое паттерн делегирования событий в JavaScript
Можно ли повесить обработчик сабмита на кнопку и на форму одновременно
Что происходит при рекурсивном вызове с созданием промисов в JavaScript: зависнет ли страница или будет пропускаться рендер
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью