【发布时间】:2010-12-15 16:47:26
【问题描述】:
我正在使用 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 在圣地亚哥
【问题讨论】:
-
一个可能的原因可能是事件处理程序被附加了两次。在浏览器控制台(Firebug)中尝试
$(":radio").data('events').change.length。如果它返回 2,则附加了 2 个更改处理程序。 -
aside:
$(':radio')会将事件处理程序附加到页面上的所有单选按钮(如果有的话)。我更喜欢$('#frmMDR :radio').change(function () {或$(':radio','#frmMDR').change(function () {。 -
是的,这绝对是问题所在。我该如何解决?为什么我要给处理器接线两次?谢谢!
-
我最终使用了这个......它工作正常,但似乎有点 hacky。我很乐意找到更好的解决方案... $('#frmMDR :radio').unbind('click').bind('click', function () { $('#frmMDR').submit() ; });
-
也许如果你打印出原始的点击处理程序,它会给你一个线索。
标签: javascript jquery html radio-button double-submit-problem