我尝试了以下两个脚本,以防止用户提交多个以下表单。在两种情况下都禁用提交按钮,但是没有发送表单(放置了断点并且没有调用OnClick方法)
按钮:
<asp:Button ID="BtnSubmit" runat="server" Text="Submit" onclick="BtnSubmit_Click" />
脚本:
<script type="text/javascript"> $("#BtnSubmit").click(function () {
var button = $(this);
button.prop('disabled', true);
setTimeout(function () {
button.prop('disabled', false);
}, 5000);
});</script>
和
$('form').on('submit', function (e) {
$('[type="submit"]').prop('disabled','disabled');
});
答案 0 :(得分:2)
一个简单的想法是将按钮的类型更改为“按钮”(而不是“提交”),而不是禁用它。这样,如果至少再次点击,它将不会提交表格。
另一个想法来自这里:http://encosia.com/disable-a-button-control-during-postback/ -
链接中的重要文字:
禁用“提交”按钮时出现的一个陷阱 客户端是它将取消浏览器的提交,从而 回发。将
UseSubmitBehavior
属性设置为false
会告诉.NET 无论如何都要注入必要的客户端脚本来激发回发, 而不是依赖于浏览器的表单提交行为。
然后,您的按钮看起来像这样:
<asp:Button runat="server" ID="BtnSubmit" Text="Submit"
OnClientClick="this.disabled = true; this.value = 'Submitting...';"
UseSubmitBehavior="false"
OnClick="BtnSubmit_Click" />
我不喜欢内联OnClientClick
,因此您应该尝试将其删除并保留jQuery点击处理程序,并适当地设置UseSubmitBehavior
。我觉得事件的顺序无关紧要。
答案 1 :(得分:-1)
对于前者,你必须改为:
<script type="text/javascript">
$("#<%= BtnSubmit.ClientID %>").click(function () {
var button = $(this);
button.prop('disabled', true);
setTimeout(function () {
button.prop('disabled', false);
}, 5000);
});</script>
实际ID将比btnsubmit更长,除非您定义了ClientIDMode="Static"
。 (类似于ct100_contentplaceholder_btnsubmit)。使用服务器的ClientID属性可以找到控件的正确ID。