Отправка формы переопределения jQuery не работает, когда отправка вызывается javascript для элемента

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
34
0
44 858
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Я согласен - не используйте навязчивый JavaScript в своем коде, это просто создает головную боль, если вы смешиваете с ним ненавязчивый JavaScript.

Jason Bunting 27.09.2008 01:23

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

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

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 () - они просто не проходят через обычную цепочку делегирования событий.

Eran Galperin 27.09.2008 01:28
Ответ принят как подходящий

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

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

    var oldSubmit = form.submit;
    form.submit = function() {
        $(form).trigger("submit");
        oldSubmit.call(form, arguments);
    }
  • Почему бы не привязать ко всем тегам <a>? Тогда вам не нужно делать какие-либо исправления обезьяны, и это может быть так просто (при условии, что все ссылки находятся внутри тега формы):

    $("form a").click(function() {
        $(this).parents().filter("form").trigger("submit");
    });

Что означает «форма» в первом примере?

tishma 20.04.2012 13:24

@tishma Элемент DOM формы, как в этом примере: stackoverflow.com/a/931482/1048862

Matt 11.10.2012 23:11

Это не будет работать в некоторых старых браузерах. Причиной является свойство JS .submit. Используйте $ (). Submit (function () {...}); вместо.

Chris Pillen 25.10.2012 16:08

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

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

а потом:

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

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

Похоже, это помогло обойти проблему.

Другие вопросы по теме