При отправке формы срабатывает событие 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();
Комментарии
<code>, для нескольких строк кода — тег<pre>, если больше 10 строк — ссылку на песочницу (plnkr, JSBin, codepen…)