点击后禁用asp.net按钮以防止双击

问题描述 投票:0回答:16

我有一个 ASP.NET 按钮,我需要在用户单击它后禁用它以防止双击。提交完成后,必须再次启用它。谁能帮我解决这个问题吗?

javascript jquery asp.net asp.net-ajax
16个回答
47
投票

这是一个适用于 asp.net 按钮对象的解决方案。在前端,将这些属性添加到您的 asp:Button 定义中:

<asp:Button ... OnClientClick="this.disabled=true;" UseSubmitBehavior="false" />

在后端,在单击事件处理程序方法调用中,将此代码添加到末尾(最好在finally块中)

myButton.Enabled = true;

37
投票

我找到了这个,它有效:

btnSave.Attributes.Add(
    "onclick", 
    "this.disabled = true;" + ClientScript.GetPostBackEventReference(btnSave, null) + ";");

17
投票

检查此链接,这是最简单的方法,它不会禁用验证。

http://aspsnippets.com/Articles/Disable-Button-before-Page-PostBack-in-ASP.Net.aspx

如果您有例如

  <form id="form1" runat="server">
      <asp:Button ID="Button1" runat="server" Text="Button1" OnClick="Button1_Clicked" />
  </form>

然后就可以使用了

  <script type = "text/javascript">
  function DisableButton() {
      document.getElementById("<%=Button1.ClientID %>").disabled = true;
  }
  window.onbeforeunload = DisableButton;
  </script>

要禁用按钮 ifafter 验证成功,就像页面正在执行服务器回发一样。


14
投票

如果您想防止由于响应缓慢的服务器端代码而双击,那么这可以正常工作:

<asp:Button ... OnClientClick="this.disabled=true;" UseSubmitBehavior="false" />

尝试将 Threading.Thread.Sleep(5000) 放在服务器上的 _Click() 事件上,您将看到该按钮在服务器处理单击事件时被禁用。

也不需要服务器端代码来重新启用按钮!

您还可以更改按钮文本,如单击后如何禁用提交按钮?

中的建议
   this.disabled=true; this.value='Sending…';

11
投票

只需要为asp按钮添加2个属性:

OnClientClick="this.disabled='true';"  UseSubmitBehavior="false"

例如

<asp:Button ID="Button1" runat="server" Text="TEST" OnClientClick="this.disabled='true';"  UseSubmitBehavior="false" CssClass="button-content btnwidth" OnClick="ServerSideMethod_Click"  />

欲了解更多详情:

https://bytes.com/topic/asp-net/answers/918280-disable-button-click-prevent-multiple-postbacks


10
投票

如果有人关心的话,我最初发现了这篇文章,但我在页面上的验证中使用了 ASP.NET 的构建。该解决方案有效,但即使已验证,也会禁用该按钮。您可以使用以下代码来实现它,以便仅在通过页面验证时禁用该按钮。

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Submit" OnClientClick=" if ( Page_ClientValidate() ) { this.value='Submitting..'; this.disabled=true; }" UseSubmitBehavior="false" />

5
投票
<asp:Button ID="btnSend" runat="server" Text="Submit"  OnClick="Button_Click"/>

        <script type = "text/javascript">
            function DisableButton()
            {
                document.getElementById("<%=btnSend.ClientID %>").disabled = true;
            }
            window.onbeforeunload = DisableButton;
        </script>

3
投票

您可以使用客户端 onclick 事件来执行此操作:

yourButton.Attributes.Add("onclick", "this.disabled=true;");

2
投票

在 OnClick 事件上禁用按钮,然后在 AJAX 回调事件处理程序上重新启用。这是我使用 jQuery 的方法。

<script>
$(document).ready(function() {

    $('#buttonId').click(function() {
         $(this).attr('disabled', 'disabled');
         callAjax();
    });

});

function callAjax()
{
    $.ajax({
      url: 'ajax/test.html',
      success: function(data) {
         //enable button
         $('#buttonId').removeAttr('disabled');

      }
    });
}
</script>

2
投票

我喜欢禁用按钮并调用回发,这样在按钮禁用后后面的代码仍然可以运行。

这就是我从后面的代码附加的方式:

btnProcess.Attributes.Add("onclick", " this.disabled = true; __doPostBack('btnProcess', ''); return false;")

然后重新启用后面代码中的按钮:

btnProcess.Enabled = True

1
投票

使用 jQuery:

$('form').submit(function(){
    $(':submit', this).click(function() {
        return false;
    });
});

1
投票

试试这个,它对我有用

<asp:Button ID="button" runat="server" CssClass="normalButton" 
Text="Button"  OnClick="Button_Click" ClientIDMode="Static" 
OnClientClick="this.disabled = true; setTimeout('enableButton()', 1500);" 
UseSubmitBehavior="False"/>  

然后

<script type="text/javascript">
function enableButton() {
document.getElementById('button').disabled = false;
}
</script>

您可以在“setTimeout”中调整延迟时间


1
投票

如果您使用的是 asp.net 验证器,则此解决方案有效:

<script language="javascript" type="text/javascript">
function disableButton(sender,group)
{
    Page_ClientValidate(group);
    if (Page_IsValid)
    {
        sender.disabled = "disabled";
        __doPostBack(sender.name, '');
    }
}</script>

并更改按钮:

<asp:Button runat="server" ID="btnSendMessage" Text="Send" OnClick="btnSendMessage_OnClick" OnClientClick="disableButton(this,'theValidationGroup')" CausesValidation="true" ValidationGroup="theValidationGroup" />

0
投票

您可以使用 JavaScript 来完成此操作。在您的

form
标签中,
onsubmit="javascript:this.getElementById("submitButton").disabled='true';"


0
投票

这适用于常规 html 按钮。

    <input id="Button1"
    onclick="this.disabled='true';" type="button"
    value="Submit" name="Button1"
    runat="server" onserverclick="Button1_Click">

在回发完成之前该按钮将被禁用,以防止双击。


0
投票
<script type = "text/javascript">
function DisableButtons() {
    var inputs = document.getElementsByTagName("INPUT");
    for (var i in inputs) {
        if (inputs[i].type == "button" || inputs[i].type == "submit") {
            inputs[i].disabled = true;
        }
    }
}
window.onbeforeunload = DisableButtons;
</script>
© www.soinside.com 2019 - 2024. All rights reserved.