Задача: Отловить срабатывание формы на странице. Есть следующий код:
$(document).ready(function () {
$(document).on('submit','form',function(e){
alert('wtf?');
})
})
Во внешне подключенных js есть код следующего содержания, срабатывающий по клику на определенный элемент:
h.redirect = function (a, b) {
var c = k.createElement("form");
c.action = b;
c.method = "post";
c.target = "_top";
c.style.display = "none";
var d = k.createElement("input");
d.type = "hidden";
d.name = "token";
d.value = a;
c.appendChild(d);
k.body.appendChild(c);
c.submit()
}
Внимание вопрос: С c.submit() ничего не ловится, кокос не растет, алерт не выходит, но форма работает и сабмит происходит. Как отловить событие или хотя бы объяснить, почему такая хрень? Разве c.submit() не создает событие?
UPD: Всем спасибо, я тупой лось, не посмотрел код как следует, или где описан callback без сабмита.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вообще не очень круто, что сторонний скрипт позволяет себе такие вольности типа прямого вызова submit, или какой то конкретики. Такой подход не оставляет иного выбора, кроме как украсить:
(() => {
var old_submit = HTMLFormElement.prototype.submit;
HTMLFormElement.prototype.submit = function() {
var form = this,
args = Array.prototype.slice.call(arguments),
submit_event = new Event('submit', {
bubbles: true,
cancelable: true
});
submit_event.original_submit = function() {
old_submit.apply(form, args);
};
form.dispatchEvent(submit_event);
}
})();
$(() => {
var my_form = $( 'form' )[0];
$( document )
.on('submit', 'form', function(e) {
alert('wtf?');
e.originalEvent.original_submit();
})
.on('click', 'button', function() {
my_form.submit();
});
})
Суть в вызове объекта события при вызове отправки, в котором есть ссылка на исходный отправку, что является единственным способом отправки формы. Это ужас, кошмар и ад, и я бы никогда так не поступил, но ничего лучше я не придумал.
Почему вы добавляете
on('submit')в свой документ, а не в элемент формы? Кроме того, никогда не используйтеalert, который может регистрировать строки Только во всплывающем диалоговом окне блокировки потока. Используйтеconsole.info(), который может легко регистрировать буквально что угодно.