Форма переопределения jQuery не работает, когда submit вызывается javascript для элемента - PullRequest
34 голосов
/ 27 сентября 2008

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

Ответы [ 4 ]

35 голосов
/ 27 сентября 2008

Пара предложений:

  • Перезаписать функцию отправки для выполнения злых торгов

    var oldSubmit = form.submit;
    form.submit = function() {
        $(form).trigger("submit");
        oldSubmit.call(form, arguments);
    }

    $("form a").click(function() {
        $(this).parents().filter("form").trigger("submit");
    });
11 голосов
/ 27 сентября 2008

Если вы используете jQuery, вы должны прикреплять события через собственный механизм событий , а не через свойства "on" (onclick и т. Д.). Он также имеет свой собственный метод запуска событий, который называется « trigger » и который следует использовать для активации события отправки формы.

1 голос
/ 12 апреля 2011

Это сработало для меня:

Сделать фиктивную кнопку, скрыть реальную отправку с именем submit,

и затем:

$("#mySubmit").click(function(){
    $("#submit").trigger("click"); });

установить обработчик событий на манекене, чтобы вызвать нажатие на кнопку отправки формы. пусть браузер выяснит, как отправить форму ... Таким образом, вам не нужно preventDefault при отправке формы, с которой начинается проблема.

Это, похоже, решило проблему.

1 голос
/ 27 сентября 2008

Спасибо, Эран

Я использую этот код привязки события

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, и я бы предпочел не менять его, так как ссылок так много.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...