阻止用户在ASP.NET中双击

时间:2014-02-24 18:27:36

标签: javascript asp.net submit

我尝试了以下两个脚本,以防止用户提交多个以下表单。在两种情况下都禁用提交按钮,但是没有发送表单(放置了断点并且没有调用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');
});

2 个答案:

答案 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。