У меня есть страница с нормальной формой с кнопкой отправки и некоторым jQuery, который привязывается к событию отправки формы и переопределяет его с помощью e.preventDefault() и запускает команду AJAX. Это нормально работает при нажатии кнопки отправки, но при нажатии ссылки с onclick='document.formName.submit();' событие не перехватывается обработчиком события отправки формы AJAX. Есть идеи, почему бы и нет или как заставить это работать без привязки ко всем элементам a?



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


Если вы используете jQuery, вы должны присоединять события через его собственный механизм событий, а не используя свойства «on» (onclick и т. д.). У него также есть собственный метод запуска события, метко названный «триггер», который вы должны использовать для активации события отправки формы.
Спасибо, Эран
Я использую этот код привязки событий
this._form.bind('submit', Delegate.create(this, function(e) {
e.preventDefault();
this._searchFadeOut();
this.__onFormSubmit.invoke(this, new ZD.Core.GenericEventArgs(this._dateField.attr('value')));
});
но в HTML есть устаревший код onclick, и я бы предпочел не менять его, так как ссылок очень много.
Проблема в том, что вызов метода submit () формы не активирует событие. То же самое и с методом input focus () - они просто не проходят через обычную цепочку делегирования событий.
Пара предложений:
var oldSubmit = form.submit;
form.submit = function() {
$(form).trigger("submit");
oldSubmit.call(form, arguments);
}
$("form a").click(function() {
$(this).parents().filter("form").trigger("submit");
});
Что означает «форма» в первом примере?
@tishma Элемент DOM формы, как в этом примере: stackoverflow.com/a/931482/1048862
Это не будет работать в некоторых старых браузерах. Причиной является свойство JS .submit. Используйте $ (). Submit (function () {...}); вместо.
Это сработало для меня:
Сделайте фиктивную кнопку, скройте настоящую отправку с именем submit,
а потом:
$("#mySubmit").click(function(){
$("#submit").trigger("click"); });
установите обработчик событий на манекене, чтобы вызвать щелчок по кнопке отправки формы. позвольте браузеру понять, как отправить форму ... Таким образом, вам не нужно указывать preventDefault при отправке формы, где и начинаются проблемы.
Похоже, это помогло обойти проблему.
Я согласен - не используйте навязчивый JavaScript в своем коде, это просто создает головную боль, если вы смешиваете с ним ненавязчивый JavaScript.