При отправке формы срабатывает событие submit
, оно обычно используется для проверки (валидации) формы перед её отправкой на сервер или для предотвращения отправки и обработки её с помощью JavaScript.
Метод form.submit()
позволяет инициировать отправку формы из JavaScript. Мы можем использовать его для динамического создания и отправки наших собственных форм на сервер.
Давайте посмотрим на них подробнее.
Событие: submit
Есть два основных способа отправить форму:
- Первый – нажать кнопку
<input type="submit">
или<input type="image">
. - Второй – нажать Enter, находясь на каком-нибудь поле.
Оба действия сгенерируют событие submit
на форме. Обработчик может проверить данные, и если есть ошибки, показать их и вызвать event.preventDefault()
, тогда форма не будет отправлена на сервер.
В примере ниже:
- Перейдите в текстовое поле и нажмите Enter.
- Нажмите
<input type="submit">
.
Оба действия показывают alert
и форма не отправится благодаря return false
:
<form onsubmit="alert('submit!');return false">
Первый пример: нажмите Enter: <input type="text" value="Текст"><br>
Второй пример: нажмите на кнопку "Отправить": <input type="submit" value="Отправить">
</form>
submit
и click
При отправке формы по нажатию Enter в текстовом поле, генерируется событие click
на кнопке <input type="submit">
.
Это довольно забавно, учитывая что никакого клика не было.
Пример:
<form onsubmit="alert('submit!');return false">
<input type="text" size="30" value="Установите фокус здесь и нажмите Enter">
<input type="submit" value="Отправить" onclick="alert('click')">
</form>
Метод: submit
Чтобы отправить форму на сервер вручную, мы можем вызвать метод form.submit()
.
При этом событие submit
не генерируется. Предполагается, что если программист вызывает метод form.submit()
, то он уже выполнил всю соответствующую обработку.
Иногда это используют для генерации формы и отправки её вручную, например так:
let form = document.createElement('form');
form.action = 'https://google.com/search';
form.method = 'GET';
form.innerHTML = '<input name="q" value="test">';
// перед отправкой формы, её нужно вставить в документ
document.body.append(form);
form.submit();