完整的故事是我要禁用表单提交上的提交按钮以防止多次提交。其中一个问题是表单是一个ASP.Net MVC Ajax表单 - <%using(Ajax.BeginForm ...%> - 所以它的javascript onSubmit事件已经设置好了,因此我不能在那个事件中这样做。除非有没有办法用jQuery 添加到提交事件?我的测试显示$(“#form”)。submit(...)替换提交事件,因此杀死MVC的ajaxy东西。
所以我所做的就是将按钮禁用代码附加到提交按钮的点击事件。这很好......只有它杀死了按钮的提交能力(除了按钮被禁用之外没有任何其他事情发生)。我更进了一步,使用jQuery从click事件中提交表单。这样可以解决所有问题,ajax响应作为下载文件返回,我认为因为MVC的ajax东西再次被破坏了。这就是我所在的地方:
$("#submitButton").click(function ()
{
var $button = $(this);
$button.parent().submit();
$button.attr("disabled", "disabled");
});
任何人都知道解决方法吗?
编辑: 所以,事实证明这实际上可能是MVC中的一个错误。原来我有:
<% using (Ajax.BeginForm("CreateAsync", "Account", new AjaxOptions
{
HttpMethod = "POST",
OnComplete = "create_Complete",
OnBegin = "create_Begin"
},
new { id = "ajaxForm" }))
{ %>
<!-- form stuff -->
<% } %>
$("#ajaxForm").submit(function() {
$(":submit", this).attr("disabled", "disabled");
});
注意我正在设置表单的ID并通过该ID获取jQuery句柄。看起来像我设置表单ID的简单事实导致了所有问题。事实上,如果我设置表单ID,我可以打破任何jQuery干预的表单提交。所以这完全像宣传的那样:
<% using (Ajax.BeginForm("CreateAsync", "Account", new AjaxOptions
{
HttpMethod = "POST",
OnComplete = "create_Complete",
OnBegin = "create_Begin"
}))
{ %>
<!-- form stuff -->
<% } %>
$("form").submit(function() {
$(":submit", this).attr("disabled", "disabled");
});
答案 0 :(得分:1)
基本上像
$("form").submit(function() {
$(this).submit(function() { return false; });
$(":submit", this).addClass("PseudoDisabled");
});
附在document.ready上的在我们的项目中运行良好。由于您无法实际禁用提交按钮,否则将忽略回发。我们基本上创建了一个在onSubmit上应用的禁用样式,它给出了禁用的外观,并通过附加一个新的提交事件处理程序来阻止多个提交。
答案 1 :(得分:0)
原来这是一个错误。请参阅已编辑的问题以获得答案。