我为什么要两次提交表格? jQuery submit()带单选按钮

时间:2010-12-15 16:47:26

标签: javascript jquery html radio-button double-submit-problem

我正在使用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>

我猜我不应该使用更改事件。如果有人知道如何解决问题,我很乐意听到任何想法。非常感谢任何提示。

干杯,
〜在圣地亚哥

2 个答案:

答案 0 :(得分:6)

你有两个点击,因为两个单选按钮正在改变状态。单选按钮只允许选择组中的一个元素,因此当您单击单选按钮时,会发生两个事件:

  1. 选择了一个新的单选按钮
  2. 取消选择之前选择的单选按钮
  3. 这是两个事件以及您的代码被击中两次的原因。要解决这个问题,你可以给你的单选按钮一个类,然后使用类作为选择器单击处理事件。

    <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();
    });
    

答案 1 :(得分:3)

您应该只检查选择的更改功能中的选定内容。这样它只会触发所选的单选按钮,并且您不需要担心绑定或解除任何事件的绑定,无论输入方法改变了什么,它都应该工作。

这是关于handling events from check boxes and radio buttons in JQuery的文章。