Почему я отправляю форму дважды?jQuery submit () с переключателем - PullRequest
3 голосов
/ 15 декабря 2010

Я использую jQuery для отправки формы в приложении MVC. У меня есть точка останова внутри контроллера, и я вижу, что ее ударили дважды. Что я делаю не так?

Вот мой JQuery

 (function ($) {

    $(document).ready(function () {

        $(':radio').change(function () {

            $('#frmMDR').submit();
        });

    });
})(jQuery);

а вот форма html

<form action="/Module/ModuleIndex" id="frmMDR" method="get">
  <input id="rdoMaintenance" name="module" type="radio" value="Maintenance" /><label for="rdoMaintenance">M</label>
   <input id="rdoDiagnostics" name="module" type="radio" value="Diagnostics" /><label for="rdoDiagnostics">D</label>
   <input id="rdoRepair" name="module" type="radio" value="Repair" /><label for="rdoRepair">R</label>
 <input id="hdnVehicle" name="hdnVehicle" type="hidden" value="" />
</form>

Полагаю, мне не следует использовать событие change. Если кто-нибудь знает, как исправить проблему, я хотел бы услышать любые идеи. Большое спасибо за любые советы.

Приветствия
~ ck в Сан-Диего

Ответы [ 2 ]

6 голосов
/ 16 декабря 2010

Вы получаете два удара, потому что две радиокнопки меняют состояние.Радиокнопки позволяют выбирать только один элемент в группе, поэтому при нажатии радиокнопки происходит два события:

  1. Выбирается новая радиокнопка
  2. Ранее выбранныйпереключатель не установлен

Это два события и причина, по которой ваш код дважды нажимается.Чтобы решить эту проблему, вы можете назначить своим переключателям класс и затем обработать событие при нажатии, используя класс в качестве селектора.

<input class="radio" id="rdoMaintenance" name="module" type="radio" value="Maintenance" /><label for="rdoMaintenance">M</label>
<input class="radio" id="rdoDiagnostics" name="module" type="radio" value="Diagnostics" /><label for="rdoDiagnostics">D</label>
<input class="radio" id="rdoRepair" name="module" type="radio" value="Repair" /><label for="rdoRepair">R</label>

И ваш jQuery может быть:

$('.radio').click(function () {
    $('#frmMDR').submit();
});
3 голосов
/ 16 декабря 2010

Вероятно, вам следует просто проверить, выбрано ли изменение в функции, для которой выбрано. Таким образом, он будет срабатывать только для выбранной радиокнопки, и вам не нужно беспокоиться о привязке или откреплении каких-либо событий, и он должен работать независимо от того, какой метод ввода изменил его.

Вот статья о обработке событий от флажков и переключателей в JQuery .

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