Есть ли способ перехватить отправку формы, которая была инициирована JavaScript?
Я пытаюсь уменьшить количество спам-сообщений от ботов, выполняя некоторую проверку на стороне клиента (с помощью reCAPTCHA v2, если это имеет значение). Когда пользователь отправляет форму, я могу подтвердить, что входные данные были проверены (reCAPTCHA была заполнена), проверив флаг в методе, указанном с помощью атрибута onSubmit формы ...
<form ... id="my_form" onSubmit="submitHandler()">
function submitHandler(e) {
if ( !valid ) {
e.preventDefault();
}
}
... или в методе, определенном с помощью обработчика событий jQuery .submit ():
$('#my_form').submit(function(e) {
if ( !valid ) {
e.preventDefault();
}
});
Проблема в том, что ни один из этих методов не вызывается при отправке формы через JavaScript. Когда я открываю консоль и проверяю отправку через JavaScript ...
document.getElementById('my_form').submit()
... форма отправляется и ни один метод не вызывается. Похоже, что событие отправки формы не было запущено, поэтому я не могу проверить, были ли данные проверены.
Предположительно, эта отправка формы на основе JavaScript - это метод, который спам-боты будут использовать для отправки формы, что отслеживает тот факт, что спам в форме не был уменьшен благодаря этим усилиям. Они могут обойти мои чеки.
Для ясности, сторонняя служба форм выполняет тяжелую работу по фактической проверке поля на стороне сервера. Я просто пытаюсь уменьшить количество спама, который отправляется на их сервер.
Можно ли перехватить отправку этой формы на основе JavaScript? Неправильно ли я подхожу к этому?
РЕДАКТИРОВАТЬ: Чтобы уточнить, метод onsubmit вызывает вызывается, когда форма отправляется с помощью кнопки отправки формы. Но он не вызывается, когда форма отправляется через JavaScript (.submit ()).