← Назад к вопросам
Как будет работать кнопка с type="submit"?
2.0 Middle🔥 241 комментариев
#JavaScript Core#TypeScript
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как работает button с type="submit"?
Этот вопрос проверяет базовое понимание HTML форм и их жизненного цикла в браузере. Это необходимое знание для любого фронтенд-разработчика.
Основной механизм
Кнопка с type="submit" автоматически отправляет форму, в которой она находится. Это встроенное поведение браузера.
Базовый пример
<form id="loginForm">
<input type="email" name="email" required />
<input type="password" name="password" required />
<button type="submit">Войти</button>
</form>
Когда пользователь нажимает кнопку:
- Браузер проверяет валидацию формы (required, type validation)
- Если всё ок, генерируется событие submit
- Форма отправляется (по умолчанию GET на страницу)
События при отправке
const form = document.getElementById('loginForm');
form.addEventListener('submit', (event) => {
event.preventDefault();
const formData = new FormData(form);
const email = formData.get('email');
const password = formData.get('password');
fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email, password })
})
.then(res => res.json())
.catch(err => console.error('Error', err));
});
Различные типы кнопок
<button type="submit">Отправить</button>
<button type="reset">Очистить</button>
<button type="button">Нажми меня</button>
<button>Это тоже submit</button>
Валидация перед submit
Браузер автоматически проверяет:
- required: поле заполнено
- type="email": корректный email
- min/max: значение в диапазоне
Если валидация не пройдена, submit не будет вызван.
Отправка данных
GET (по умолчанию)
<form method="GET" action="/search">
<input type="text" name="q" />
<button type="submit">Поиск</button>
</form>
POST (безопаснее)
<form method="POST" action="/login">
<input type="email" name="email" />
<input type="password" name="password" />
<button type="submit">Войти</button>
</form>
В React приложениях
import { useState } from 'react';
export function LoginForm() {
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const handleSubmit = async (event) => {
event.preventDefault();
setLoading(true);
const formData = new FormData(event.target);
const email = formData.get('email');
try {
const response = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email })
});
const data = await response.json();
} catch (err) {
setError(err.message);
} finally {
setLoading(false);
}
};
return (
<form onSubmit={handleSubmit}>
<input
type="email"
name="email"
placeholder="Email"
required
/>
{error && <p style={{ color: 'red' }}>{error}</p>}
<button type="submit" disabled={loading}>
{loading ? 'Загрузка...' : 'Войти'}
</button>
</form>
);
}
Жизненный цикл submit
- Пользователь нажимает button type="submit"
- Браузер генерирует событие submit
- Обработчик события может вызвать event.preventDefault()
- Если preventDefault не вызван, форма отправляется
- Обычно это вызывает перезагрузку страницы (если не используется AJAX)
Частые ошибки
// Неправильно: забыли event.preventDefault()
form.addEventListener('submit', () => {
fetch('/api/login', {...});
// Форма всё равно отправится!
});
// Правильно
form.addEventListener('submit', (event) => {
event.preventDefault();
fetch('/api/login', {...});
});
На собеседовании
Хороший ответ покажет:
- Как браузер автоматически отправляет форму
- Событие submit и его обработка
- event.preventDefault() и его роль
- Валидация HTML5
- Как это используется в React приложениях
- Разница между типами кнопок
Это показывает понимание основ HTML и браузерной семантики.