【问题标题】:Prevent user from double clicking in ASP.NET防止用户在 ASP.NET 中双击
【发布时间】:2014-03-26 14:22:02
【问题描述】:

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

【问题讨论】:

  • OnClick 方法可能没有被调用,因为特定按钮被禁用,并且提交表单的默认行为是在有效负载中不包含任何禁用的输入(因此 ASP.NET 可以'不知道按钮被点击了)。我的一个快速想法是将按钮的type 更改为“按钮”(而不是“提交”),而不是禁用它。这样,如果再次点击至少不会提交表单
  • 另外,你可以试试这个:encosia.com/disable-a-button-control-during-postback
  • @Ian 该链接实际上运行良好。谢谢你。发布为答案,我会接受它

标签: javascript asp.net submit


【解决方案1】:

一个快速的想法是将按钮的类型更改为“按钮”(而不是“提交”),而不是禁用它。这样,至少再次点击它就不会提交表单。

另一个想法来自这里: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。我觉得事件的顺序应该无关紧要。

【讨论】:

    【解决方案2】:

    对于前者,您必须这样做:

    <script type="text/javascript">        
    $("#<%= BtnSubmit.ClientID %>").click(function () {
            var button = $(this);
            button.prop('disabled', true);
            setTimeout(function () {
                button.prop('disabled', false);
            }, 5000);
        });</script>
    

    除非您定义了ClientIDMode="Static",否则实际 ID 将比 btnsubmit 长得多。 (类似于 ct100_contentplaceholder_btnsubmit)。使用来自服务器的 ClientID 属性来定位控件的正确 ID。

    【讨论】:

    • The submit button is being disabled in both cases, however the form is not being sent
    • 就像@Ian 所说,按钮 id 不是问题
    猜你喜欢
    • 2011-09-11
    • 2014-10-01
    • 2017-05-31
    • 2011-07-08
    • 2018-04-16
    • 1970-01-01
    • 2019-02-05
    • 2018-12-25
    • 1970-01-01
    相关资源
    最近更新 更多