如何在第一次提交(在客户端)后立即禁用 ASP.NET 按钮?

Posted

技术标签:

【中文标题】如何在第一次提交(在客户端)后立即禁用 ASP.NET 按钮?【英文标题】:How to disable an ASP.NET Button right after first submit (on the client)? 【发布时间】:2015-03-06 04:19:44 【问题描述】:

我有一个提交按钮。单击此按钮后,表单将被提交。我想防止用户多次点击它。所以 OnClientClick

我正在使用这样的禁用按钮的功能,

$("#btn123").attr("disabled", "disabled");

但现在的问题是我的表单没有被提交。

即使我从我的 javascript 函数返回 true。以下是我的javascript函数

 function ab() 

        $("#btn123").attr("disabled", "disabled");

        return true;
    

我也在使用母版页。

【问题讨论】:

如果你想提交表单,那么你可以在服务器端使用 .Visible = false; 禁用它 在服务器端禁用只会在调用完成时反映,所以不会起作用@Adil 参考这个***.com/questions/22803461/… 您正在禁用按钮单击处理程序中的按钮。为什么不禁用表单提交处理程序中的按钮?这将确保表单被提交。 在提交按钮上单击一次时,您已将禁用属性添加到具有 id btn123 的提交按钮。如果您仔细检查 DOM 结构中的元素,您会发现在提交标记中添加了 disabled="disabled"。因此,只需在您提交的内容完成后做一件事,调用另一个函数并在其中添加$("#btn123").attr("disabled", "false"); 【参考方案1】:

我认为问题在于它需要绑定到表单的提交。下面的代码将解决这个问题。

$("#formId").submit(function()
    $("#btn123").attr("disabled", "disabled");
)

【讨论】:

这听起来是个不错的计划,但它对我不起作用——如果按钮在表单的 submit() 事件中被禁用,回发仍然会被阻止。这可能取决于浏览器/版本。【参考方案2】:

按钮未触发 postBack,因为您已禁用此功能。避免多个 postBack 的方法是并排放置两个按钮。真实的和虚拟的。第一次点击隐藏/删除真实按钮并显示虚拟按钮

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" ClientIDMode="Static" OnClientClick="disableButton();"/>

<asp:Button ID="ButtonDummy" runat="server" Text="Button" ClientIDMode="Static" OnClientClick='return false;' style="display:none;"/>

和 JS:

function disableButton() 

 $("#Button1").hide();

 $("#ButtonDummy").show();

 return true;
 

【讨论】:

【参考方案3】:

对于我认为很常见的事情来说,这令人惊讶地晦涩难懂。如果在单击按钮后禁用该按钮,它将阻止回发。即使@Rajdeep 建议在表单的提交事件中禁用它也对我不起作用。

我发现最好的方法是设置按钮的 UseSubmitBehavior="false":

<asp:Button ID="btn123" UseSubmitBehavior="false" OnClientClick="ab()"
    OnClick="btn123_Click" runat="server" />

这将导致服务器修改按钮的 OnClick 事件以包含一个用于启动回发的 javascript 调用,因此它在浏览器中如下所示:

OnClientClick="ab();__doPostBack('ctl00$btn123','')"

这将导致在调用函数 ab() 后发生回发,即使 btn123 最终被禁用。

【讨论】:

以上是关于如何在第一次提交(在客户端)后立即禁用 ASP.NET 按钮?的主要内容,如果未能解决你的问题,请参考以下文章

单击不是提交按钮后如何禁用html按钮

点击按钮后立即禁用与不同 ui 元素的用户交互

如何在提交后禁用输入字段

表单提交后如何禁用以前禁用的选择

(客户端)禁用提交按钮的最佳方法是啥?

提交后如何禁用输入字段