Предотвратить отправку формы дважды с событием изменения

У меня есть форма со скрытой кнопкой отправки и одним вводом текста. В текстовом вводе с помощью jQuery я прикрепил к нему событие изменения, которое отправляет форму. Дело в том, что если я нажму Enter на вводе, форма будет отправлена ​​​​дважды. Я думаю, это потому, что ввод отправляет форму, а ввод обнаруживает событие изменения и снова отправляет форму. У меня два вопроса: - Верна ли моя мысль? - Как я могу это исправить?

Это javascript:

$("input.price").live('change', function () {
  $(this).closest('form').submit();
});

Изменить: я думаю, что e.preventDefault() предотвращает значение по умолчанию для события «изменить», но не предотвращает событие «отправить». Я пытаюсь сделать это до события «изменить», но безуспешно, но, возможно, я близок к решению :

$("input.price").live('submit', function (e) {
       e.preventDefault();
});

person Phoenix_uy    schedule 12.03.2013    source источник


Ответы (3)


Вам нужно использовать функцию preventDefault(), чтобы предотвратить отправку формы.

E.g.

$("input.price").live('change', function (e) {
  e.preventDefault();
  $(this).closest('form').find('input.submitButton').click();
});
person dev    schedule 12.03.2013

Что мне здесь не хватает, почему бы вам не сделать это вместо этого:

$("input.price").live('change', function (eventObject) {
     $(this).closest('form').submit();
 });
person Mike C.    schedule 12.03.2013
comment
Спасибо, только поменяю. (но проблема осталась) - person Phoenix_uy; 13.03.2013
comment
Если вы отправите форму, используя метод, который я показал, не могли бы вы просто удалить скрытую кнопку отправки? - person Mike C.; 13.03.2013
comment
Да, Майк, я убрал кнопку. Но двойная отправка сохраняется - person Phoenix_uy; 13.03.2013
comment
Я думаю, нам нужно увидеть больше кода. То, что вы описываете, не имеет особого смысла, если только вы не привязываетесь несколько раз где-то случайно. - person Mike C.; 13.03.2013

Наконец я нашел решение! Дело в том, что... как говорит Майк С., дополнительный код может помочь решить проблему. Проблема заключалась в том, что форма, которую я пытаюсь отправить, представляет собой Ajax.BeginForm MVC, поэтому ... основная проблема заключается в отправке этой формы ajax, это была вторая отправка!

Я не мог изменить это поведение.. только изменив Ajax.Beginform с помощью Html.Beginform.., чего я не хочу делать. Итак... я придумал это "ржавое" решение:

$("input.price").live('keypress', function (e) {
     if (e.keyCode == 13) {
        $(this).attr('data-submitting', true);
     }
});

$("input.price").live('change', function (e) {
     if (!$(this).attr('data-submitting')) {
         $(this).closest('form').submit();
     }
});
person Phoenix_uy    schedule 13.03.2013